[英]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.