我有两个箱子X
和Z
,我想同时使用它们,但是X
依赖于某个特定版本的Z
。例如,mongodb依赖于tokio 0.2,而我正在使用tokio 0.3。
X
没有重新导出Z
,因此我(认为)必须在Cargo.toml
中手动指定Z
。如果我指定了错误的版本,可能会出现错误。如何告诉Cargo使用X
所需的任何版本的Z
?
我有两个箱子X
和Z
,我想同时使用它们,但是X
依赖于某个特定版本的Z
。例如,mongodb依赖于tokio 0.2,而我正在使用tokio 0.3。
X
没有重新导出Z
,因此我(认为)必须在Cargo.toml
中手动指定Z
。如果我指定了错误的版本,可能会出现错误。如何告诉Cargo使用X
所需的任何版本的Z
?
Z
版本要求,而Cargo将找出如何选择正确的版本以(可能)在您的代码和X
中使用。X
没有以任何方式公开Z
,则您不需要真正使用相同版本的Z
。如果您使用与X
不同的主要版本Z
,则Cargo将仅为您和X
使用两个版本的Z
。Z = "*"
将告诉 Cargo 选择 Z
的版本本身。如果 X
是您的依赖树中唯一依赖于 Z
的其他板条箱,那么这确实会导致 Cargo 选择与 X
依赖的相同版本的 Z
。但是,如果有其他板条箱依赖于其他版本的 Z
,则您将失去该保证,因此这并不是一个真正的解决方案。 - Sven MarnachX
使用的 Z
版本,而不是由依赖项 Y
使用的 X
版本,因为没有办法告诉 Cargo 这就是你想要的。 - Sven MarnachX
没有公开使用,你不应该纠结于它使用的是哪个版本。只需在代码中使用您需要的任何版本 Z
并且 Cargo 将为 X
提供它所需的 Z
版本。如果恰好存在一个您都可以使用的版本,那太好了,您和 X
都将得到它。否则,没问题,创建两次,一次为您,一次为 X
。 - EmounZ
创建了一个线程池或记录器,你最终会得到两个不同的线程池或记录器或其他东西。如果 Z
被正确编写,事情仍然可以正常工作,但并不意味着没有运行时成本需要支付,也不意味着成本完全看不见。我错了吗? - user4815162342Z::SomeType
,编译器不会将第一个版本中的该类型视为与第二个版本中的相同类型。 - Emoun
X
需要您使用正确的版本的Z
才能正确地进行交互操作,则它需要为您提供实现此操作的手段,这可能意味着它应该简单地重新导出它正在使用的Z
版本,但也可能意味着它提供了一个封装了它正在使用的Z
位的接口。如果X
没有这样做,我认为这是一个错误。 - Sven Marnach