如何从另一个模块导入特征的实现
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()
}
}
我有 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()
}
}