我想使用dijkstra来自pathfinding箱子的功能:
pub fn dijkstra<N, C, FN, IN, FS>(
start: &N,
neighbours: FN,
success: FS
) -> Option<(Vec<N>, C)>
where
N: Eq + Hash + Clone,
C: Zero + Ord + Copy,
FN: Fn(&N) -> IN,
IN: IntoIterator<Item = (N, C)>,
FS: Fn(&N) -> bool,
Run Code Online (Sandbox Code Playgroud)
要使用它,我需要Zero从num_traits箱子中实现特征.但是我该如何导入Zero?一个明显的方法是添加extern crate num_traits;到我的箱子并Cargo.toml适当地修复我.但是在这样做时,我必须观察依赖的依赖性,这是不好的.
我可以以某种方式实现Zero没有明确依赖于 num_traits板条箱,如下所示?
use pathfinding::num_traits::Zero;
Run Code Online (Sandbox Code Playgroud)
鉴于将未公开的依赖项从包(例如pathfinding)导入依赖项目的初衷,目前不允许这样做.如果包不重新导出依赖项,那么它将使其更多地是一个实现细节,而不是API的一部分.因此,允许依赖者访问任何"子依赖"将是灾难性的.
但是,在这种情况下,由于num_traits明确在crate的公共API中使用,因此依赖者也可以访问它.实际上,您需要在自己的项目中添加依赖项,同时注意保持兼容版本.否则,货物最终可能会构建重复的依赖关系.
[dependencies]
num_traits = "0.1"
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况,pathfinding可以从出口中受益num_traits,如下所示.PR#6是为此目的而创建的,并已合并到版本0.1.12(谢谢,@ SamuelTardieu).
pub extern crate num_traits;
Run Code Online (Sandbox Code Playgroud)
完成后,您现在可以完全按照问题末尾所写的内容完成:
use pathfinding::num_traits::Zero;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |