为何无法在rand_chacha::ChaChaRng中使用rand::Rng的gen_range方法?
问题原因
你的项目同时依赖了两个版本的rand_chacha和rand_core:
rand v0.9.0-alpha.1自带了rand_chacha v0.9.0-alpha.1,依赖rand_core v0.9.0-alpha.1- 你单独添加的
rand_chacha v0.3.1依赖rand_core v0.6.4
Rust中不同版本的同一 crate 会被视为完全独立的实体,ChaCha20Rng(来自rand_chacha v0.3.1)实现的是旧版本rand_core v0.6.4的RngCore trait,而rand v0.9.0-alpha.1的Rng trait要求实现的是新版本rand_core v0.9.0-alpha.1的RngCore trait,两者不兼容,因此触发编译错误。
解决方法
有两种可行的解决方案:
方案一:使用稳定版依赖(推荐)
将依赖切换到稳定版本,确保rand和rand_chacha的版本匹配:
修改Cargo.toml:
[dependencies] rand = "0.8" rand_chacha = "0.3"
你的代码无需修改即可直接运行,此时rand v0.8依赖的rand_core v0.6与rand_chacha v0.3依赖的rand_core版本完全一致,trait兼容。
方案二:使用Alpha版本并移除重复依赖
如果你坚持使用rand v0.9.0-alpha.1,只需移除单独的rand_chacha依赖——因为rand v0.9-alpha已经内置了对应版本的rand_chacha:
修改Cargo.toml:
[dependencies] rand = "0.9.0-alpha.1"
然后调整代码中的导入路径,确保使用的是rand内置的rand_chacha:
use rand::Rng; use rand_chacha::ChaChaRng; use rand_core::SeedableRng; fn test(seed: u64) { let mut gen = ChaChaRng::seed_from_u64(seed); let _ = gen.gen_range(0..10); }
这样ChaChaRng来自与rand v0.9-alpha匹配的rand_chacha v0.9-alpha,实现的RngCore trait版本与rand::Rng要求一致,编译错误将消失。
内容的提问来源于stack exchange,提问作者J K
相关产品推荐
相关产品推荐

