[英]Question about Rust (Edition 2021) module resolution (very simple example)
我在 src/ 中有以下代码
main.rs
a.rs
b.rs
这是代码:
main.rs
mod a;
mod b;
use crate::a::Summary;
use crate::b::Person;
fn main() {
let p = Person{ first: "John".to_string(), last: "Doe".to_string() } ;
sum(p) ;
}
fn sum(summary: impl Summary) {
println!("{}", summary.summarize()) ;
}
a.rs
pub trait Summary {
fn summarize(&self) -> String ;
}
b.rs
use crate::Summary;
pub struct Person {
pub first: String,
pub last: String,
}
impl Summary for Person {
fn summarize(&self) -> String {
format!("{}, {}.", self.last, self.first)
}
}
我不明白的是“使用 crate::Summary;”如何不会在 b.rs 中引起问题? 它应该是“使用 crate::a::Summary;” 甚至“使用 super::a::Summary;”,但由于某种原因使用 crate::Summary 有效。 引擎盖下是否应用了某种时髦的搜索逻辑?
没有可见性说明符定义的项目可用于定义它们的模块及其所有子模块。
由于a
和b
是 crate 根模块的子模块,它们可以访问通过use
导入的Summary
object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.