потребуется в следующей редакции Rust. Это именно то, что Шепмастер будет редактировать, так что я могу с этим покончить.
аюсь получить генератор случайных чисел. посколькуOsRng::new()
может потерпеть неудачу, я хотел бы вернуться кthread_rng()
если я должен:
extern crate rand; // 0.5.5
use rand::{thread_rng, OsRng, 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::OsRng`, found struct `rand::ThreadRng`
|
= note: expected type `rand::OsRng`
found type `rand::ThreadRng`
Почему компилятор ожидаетrand::OsRng
здесь вместо реализацииRngCore
? Если я удалюmatch
и прямо вернутьthread_rng()
Я не получаю выше сообщение об ошибке.
Я не верю, что это дубликатКак вернуть экземпляр черты из метода?, как другой вопрос задает окак можно вернуть черту из функции, и этот вопрос оПочему компилятор не позволит мне вернуть черту, но хочет, чтобы я возвратилOsRng
который не является типом возврата функции.