没有实现的特性(实现特征的东西)

时间:2015-03-11 23:10:30

标签: rust traits

所以,Rust正试图告诉我一个问题,我想,但也许我只是想到了......

fn get_random<T, R>(range: Range<T>, rng: &mut R) -> T
    where T: SampleRange + PartialOrd,
          R: Rng
{
    range.ind_sample(&mut rng)
}

那里的where子句应该表明R 肯定是实现Rng,否则......好吧,来吧,对吧?但是当我尝试编译它时,它发誓说rng没有实现rand :: Rng。

究竟是什么?

  

rustc 1.0.0-nightly(cfea8ec41 2015-03-10)(建于2015-03-11)(万一你想知道)

1 个答案:

答案 0 :(得分:3)

这是生成的实际错误:

<anon>:10:11: 10:31 error: the trait `rand::Rng` is not implemented for the type `&mut R` [E0277]
<anon>:10     range.ind_sample(&mut rng)
                    ^~~~~~~~~~~~~~~~~~~~

我会突出显示类型&amp; mut R 。您的问题源于您收到太多参考资料。您的rng&mut R。您然后在调用ind_sample时尝试对其进行另一次引用。这会创建&mut &mut R,但不会实现Rng

use std::rand::distributions::range::SampleRange;
use std::rand::Rng;
use std::rand::distributions::Range;
use std::rand::distributions::IndependentSample;

 fn get_random<T, R>(range: Range<T>, rng: &mut R) -> T
    where T: SampleRange + PartialOrd,
          R: Rng
{
    range.ind_sample(rng)
}

fn main() {}