gpt4 book ai didi

rust - 如何在我的项目中不显式定义新依赖项的情况下使用另一个 crate 中的 crate?

转载 作者:行者123 更新时间:2023-11-29 07:44:46 26 4
gpt4 key购买 nike

我想使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com