如何从另一个模块导入特征的实现

How to import an implementation of a trait from another module

我有 3 个模块

在lib.rs

我尝试从 tra.rs

导入 impl Test for Block 的模块
mod tra;
mod stru;

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test() {
        use tra::Test; // This doesn't works

        let b = stru::Block::new(String::from("Text"));

        println!("{}", b.p())
    }
}

在stru.rs

写入结构 Block 的模块。

pub struct Block {
    text: String
}

impl Block {
    pub fn text(&self) -> &String {
        &self.text
    }

    pub fn new(text: String) -> Block {
        Block { text }
    }
}

在tra.rs

我正在为 Block

实现特征 Test 的模块
#[path = "stru.rs"]
mod stru;
use stru::Block;


pub trait Test {
    fn p(&self) -> &String;
}

impl Test for Block {
    fn p(&self) -> &String {
        self.text()
    }
}

我想将一个实现从 tra.rs 导入到 lib.rs。我该怎么做?

首先,您不导入实现。你导入特征就足够了。

您的错误可能是因为您在 tra.rs 中重复了 mod stru;。不。曾经。仅在 lib.rs 中定义模块(或子模块,但前提是它们是 sub-sub-modules)。相反,只是 use 它来自 crate root:

use crate::stru::Block;

pub trait Test {
    fn p(&self) -> &String;
}

impl Test for Block {
    fn p(&self) -> &String {
        self.text()
    }
}