请问各位大佬, 在使用rand crate时, 需要先把Rng这个trait导入本地作用域里..否则就会提示找不到gen() 这个让我有点茫然.
use rand::Rng;
fn main() {
let s: i32 = rand::thread_rng().gen();
}
1
共 4 条评论, 1 页
请问各位大佬, 在使用rand crate时, 需要先把Rng这个trait导入本地作用域里..否则就会提示找不到gen() 这个让我有点茫然.
use rand::Rng;
fn main() {
let s: i32 = rand::thread_rng().gen();
}
评论区
写评论谢谢大佬的详细解答. 今天又学到了
👇
苦瓜小仔: 任何定义在 trait 里的方法,在使用的时候都必须引入作用域。
实际上,你遇到的这种情况在 Rust 中随处可见。
任何定义在 trait 里的方法,在使用的时候都必须引入作用域。
实际上,你遇到的这种情况在 Rust 中随处可见。
比如以下代码:playground
可以正常运行,是因为:
iter
作为std::ops::range::Range<i32>
类型,它实现了Iterator
trait,所以才可以调用.next()
方法Iterator
trait 是被预先引入的i.next()
可以被运行,是因为有 这个 实现dbg!
可以打印实现了Debug
trait 的变量名及其值,但其内部调用相关方法,可以无需引入当前作用域next
泛型函数需要在签名中使用 trait,所以手动引入(或者通过路径使用)Debug
trait对的。泛型方法都是这么找的。
脑子转过来, 看了下源码, 大概是因为:
综上: 因为ThreadRng只是实现了RngCore, 而gen()是Rng trait里的默认方法, 所以需要use rand::Rng才能使用这个默认方法, 不然编译器也不知道这个方法是定义在哪里的..
大约应该是这个原因吧....不知道有没有大佬指点下.