потребуется в следующей редакции 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 который не является типом возврата функции.

Ответы на вопрос(1)

Ваш ответ на вопрос