我正在尝试获得一个随机数生成器。由于OsRng::new()可能会失败,因此我不得不退回给thread_rng()我:
extern crate rand; // 0.6.5
use rand::{rngs::OsRng, thread_rng, RngCore};
fn rng() -> impl RngCore {
match OsRng::new() {
Ok(rng) => rng,
Err(e) => thread_rng(),
}
}
但是,我收到此错误消息,我无法理解:
error[E0308]: match arms have incompatible types
--> src/lib.rs:6:5
|
6 | / match OsRng::new() {
7 | | Ok(rng) => rng,
8 | | Err(e) => thread_rng(),
| | ------------ match arm with an incompatible type
9 | | }
| |_____^ expected struct `rand::rngs::OsRng`, found struct `rand::prelude::ThreadRng`
|
= note: expected type `rand::rngs::OsRng`
found type `rand::prelude::ThreadRng`
为什么编译器期望rand::OsRng在这里而不是实现RngCore?如果删除match并直接返回thread_rng(),则不会得到以上错误消息。
我不认为这与如何从方法中返回特征的实例重复吗?,因为另一个问题是关于如何从函数返回特征的问题,而这个问题是关于为什么编译器不允许我返回特征,但希望我返回OsRng不是函数返回类型的。
holdtom
牧羊人nacy