You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用mod语句构建含main.rs/dyn1.rs/dyn2.rs的Rust程序

Rust模块引用问题解答(仅用mod语句实现)

问题1:main.rs和dyn1.rs需添加哪些具体mod语句?

  • main.rs:在文件顶部添加以下mod声明,将dyn1和dyn2声明为根模块的同级子模块:
    mod dyn1;
    mod dyn2;
    
  • dyn1.rs:不需要添加mod dyn2;。你之前尝试加mod dyn2;失败,是因为Rust默认会去src/dyn1/dyn2.rs找对应文件,而你的dyn2.rs在src根目录,路径不匹配;添加#[path="./dyn2.rs"]虽然能编译,但会让dyn1里生成一个独立于根模块的dyn2子模块,不符合你“dyn2不是dyn1子模块”的逻辑。正确做法是通过路径直接访问根模块的dyn2,无需重复声明。

问题2:main.rs中调用diag函数时,::前需填写什么内容?

填写dyn1,调用方式示例:

dyn1::diag(/* 传入参数 */);

问题3:main.rs函数中使用FIFTY常量时,::前需填写什么?

填写dyn2,写法示例:

let x = 3 + dyn2::FIFTY;

问题4:dyn1.rs函数中使用FIFTY常量时,::前需填写什么?

有两种符合要求的写法,都无需额外mod声明:

  1. 绝对路径:用::dyn2(::代表根模块),写法:
    let x = 3 + ::dyn2::FIFTY;
    
  2. 相对路径:用super::dyn2(super代表父模块,即main),写法:
    let x = 3 + super::dyn2::FIFTY;
    

问题5:src目录是否可仅包含这三个文件?是否必须用子目录?

完全可以只在src目录下存放这三个文件,不需要子目录。Rust模块系统支持通过mod声明直接关联同级文件,子目录仅用于嵌套模块结构的场景,这里通过根模块声明同级模块、子模块通过路径访问根模块项的方式,完全不需要子目录。

问题6:该解决方案是否需要pub关键字?

需要,原因如下:

  • dyn2.rs中的FIFTY必须保持pub const(你已正确定义),否则其他模块无法访问这个常量;
  • dyn1.rs中的diag函数必须声明为pub fn diag(...),否则main.rs无法调用该函数。

Rust模块内的项默认私有,只有标记pub才能被外部模块访问。


内容的提问来源于stack exchange,提问作者PaulCommentary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:30:42