作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 dijkstra
来自 pathfinding
crate 的函数:
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,
要使用它,我需要实现 num_traits
中的 Zero
特性箱。但是如何导入 Zero
?一个明显的方法是将 extern crate num_traits;
添加到我的 crate 中并适本地修复我的 Cargo.toml
。但在这样做时,我必须观察依赖的依赖,这并不好。
我能否在不显式依赖 num_traits
的情况下以某种方式实现 Zero
crate ,如下所示?
use pathfinding::num_traits::Zero;
最佳答案
鉴于将非公开的依赖项从 crate (例如 pathfinding
)导入依赖项目的初衷,目前不允许这样做。如果一个依赖项没有被 crate 重新导出,那么它更像是一个实现细节,而不是 API 的一部分。因此,允许依赖者访问任何“子依赖项”将是灾难性的。
然而,在这种情况下,由于 num_traits
明确地用在 crate 的公共(public) API 中,因此依赖者也可以访问它。事实上,您应该在自己的项目中添加依赖项,同时注意保持兼容的版本。否则,cargo 最终可能会构建重复的依赖项。
[dependencies]
num_traits = "0.1"
为了避免这种情况,寻路
将受益于导出它自己的 num_traits
,如下所示。 PR #6是为此目的创建的,并已合并到版本 0.1.12(感谢@SamuelTardieu)。
pub extern crate num_traits;
完成后,您现在可以完全按照问题末尾的内容进行操作:
use pathfinding::num_traits::Zero;
关于rust - 如何在我的项目中不显式定义新依赖项的情况下使用另一个 crate 中的 crate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44876113/
我是一名优秀的程序员,十分优秀!