You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:10:57