如何在我的应用程序中使用可传递依赖项框中的特征?
以下是我遇到的问题的一个最小说明性示例:
在Cargo.toml
年里,我有:
[dependencies]
mersenne_twister = "1.1.1"
rand = "0.8.5"
我的 crate 取决于rand ^0.8.5
和mersenne_twister ^1.1.1
,而这本身又取决于rand >=0.3, <0.5
:
my-crate ---> rand 0.8.5
|
|
---> mersenne_twister 1.1.1 ----> rand >= 0.3, < 0.5
在我的应用程序中,我想使用trait rand::Rng for mersenne_twister::MT19937
的实现.但是当我try 将这个特性纳入范围时,它显然没有被识别出来:
use mersenne_twister::MT19937;
use rand::Rng;
fn main() {
let mut rng = MT19937::new_unseeded();
let mut buffer = vec![0; 0xFFFF];
// error[E0599]: no method named `fill_bytes` found for struct `MT19937` in the current scope
rng.fill_bytes(&mut buffer);
}
我的猜测是,use rand::Rng;
导入的Rng
特征是one from rand 0.8.5
,而不是MT19937
实际实现的one from rand 0.4.6
,即使它们的拼写相同,但它们是截然不同且不相关的特征,因此不能互换引用.
所以我有几个问题:
- 如何在我的应用程序中使用适用于
MT19937
的Rng
特征?我认为我不能将我对rand
的依赖降低到Cargo.toml
中的0.4.6
,因为我的应用程序中需要使用其他rand 0.8.5
个. - 一般来说,应该如何使用传递依赖中定义的特征?
-
mersenne_twister
‘S的API设计是不是不再出口Rng
的糟糕做法?