繁体   English   中英

关于Rust(2021版)模块分辨率的问题(很简单的例子)

[英]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 有效。 引擎盖下是否应用了某种时髦的搜索逻辑?

没有可见性说明符定义的项目可用于定义它们的模块及其所有子模块

由于ab是 crate 根模块的子模块,它们可以访问通过use导入的Summary object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM