gpt4 book ai didi

rust - 我怎样才能在原始 crate 中使用另一个 crate 中的特征实现?

转载 作者:行者123 更新时间:2023-12-05 04:40:47 24 4
gpt4 key购买 nike

我有一个 Rust 项目,它在一个工作区中分为多个 crate 。其中一个 crate 是一个测试 crate,它包含用于其他 crate 中的单元和集成测试的实用程序。

在一个 crate 中,我定义了一个特征,该特征由测试 crate 中的结构实现。但是,当我尝试在定义特征的原始箱中使用测试箱中的结构时,我在尝试使用特征的成员函数时遇到错误。

这是一个简短的例子:

project-trait 包中:

trait Trait {
fn do_something(&self)
}

project-test 包中:

use project_trait::Trait;

pub struct TestObject;

impl Trait for TestObject {
fn do_something(&self) {
// ...
}
}

最后,回到project-trait crate:

#[cfg(test)]
mod test {
use crate::Trait;
use project_test::TestObject;

#[test]
fn use_test_object() {
let object = TestObject;
object.do_something();
}
}

project-trait 箱中运行 cargo test 时,出现错误 E0599,提示我应该导入 project_trait::Trait 以使用do_something 方法。似乎 Rust 没有看到 crate::Traitproject_trait::Trait 是相同的特征。

有解决办法吗?

最佳答案

crate 依赖图中不能有循环。因此,无论您在项目配置中实际做了什么,都不可能是依赖于 project-test#[cfg(test)] 代码是使用与 project-test 视为 project_trait::Trait 相同的 crate::Trait

您可能做了一些导致某些代码被编译为不同 crate 的一部分的操作(例如滥用 mod 以便在两个 crate 中编译相同的源文件)。这样做的结果是您有两个不同的特征,它们恰好都被命名为 Trait。因此,您会收到一个错误,因为 TestObject 实现的那个与您导入的那个不一样。

(为了更准确地解释问题所在,您需要提供更完整的示例——最好是可重现的,即“如果我将这些文件复制到本地文件夹中,它们就足以证明问题所在".)

一般来说,运行 project-trait 测试所需的任何代码都必须是 project-trait crate 或其依赖项的一部分——你不能拆分将测试助手放入一个独立的库箱中。

关于rust - 我怎样才能在原始 crate 中使用另一个 crate 中的特征实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70206407/

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