如何使用3个文件main.rs、dyn1.rs和dyn2.rs?构建Rust程序[duplicate]

vnzz0bqm  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(172)
    • 此问题在此处已有答案**:

How do I import from a sibling module?(2个答案)
昨天关门了。
这篇文章是6小时前编辑并提交审查的。

    • 考虑由3个文件组成的Rust "项目": www.example.com、www.example.com和动力2.rs。main.rs, dyn1.rs, and dyn2.rs.

main.rs.希望使用www.example.com中的函数(例如"diag")和www.example.com中的常量(例如FIFTY dyn1.rs and constants (e.g FIFTY) in dyn2.rs
dyn1.rs wants to use constants (e.g. FIFTY) in dyn2.rs
dyn2.rs pub const FIFTY:i32 = 50;pub const FIFTY:i32 = 50;
但我想在www.example.com和www.example.com中都使用FIFTY main.rs and dyn1.rs
为了简化这个问题,* * 我不希望解决方案使用任何"use"语句。**我将在理解"mod"解决方案之后添加这些语句。[我的问题已关闭,因为有一个类似但不同的问题(我如何从兄弟模块导入?---linked here)。但是那个问题和给出的答案都集中在"use"语句上。他们没有解决只使用"mod"语句做我想做的事情。]
我想我必须使用"mod"语句。
我的问题
(1)www.example.com和www.example.com应该使用什么样的mod语句,以便main可以同时使用dyn1和dyn2项,并且dyn1可以使用dyn2项? main.rs and dyn1.rs , so that main can use both dyn1 and dyn2 items and so that dyn1 can use dyn2 items?
(2)如何调用www.example.com中的fn diag::前面的内容是什么? main.rs? What goes in front of the ::?
(3)在www.example.com let x = 3 + ::FIFTY;中,我如何在函数的表达式中使用FIFTY?::前面的内容是什么? main.rs? let x = 3 + ::FIFTY; What goes in front of the ::?
(4)在www.example.com let x = 3 + ::FIFTY;中,我如何在函数的表达式中使用FIFTY?::前面的内容是什么? dyn1.rs? let x = 3 + ::FIFTY; What goes in front of the ::?
(5)最后,我的src目录可以只包含www.example.com、www.example.com和www.example.com吗?或者我必须有子目录吗?至少在逻辑上,我不认为dyn2是dyn1的子模块。 main.rs , dyn1.rs , and dyn2.rs? Or must I have subdirectories? I don't consider dyn2 a submodule of dyn1, as least logically.
(6)事后想:这个解决方案中的任何地方都需要pub关键字吗?
我已经尝试了通过查看文档可以找到的所有方法,但我肯定遗漏了一些东西。
在www.example.com中,我尝试使用:main.rs, I've tried using:

mod dyn1;
mod dyn2;
dyn1::diag(...);
let x = 3 + dyn2::FIFTY;

在www.example.com中,我尝试使用:dyn1.rs, I've tried using:

mod dyn2;
let y = 3 + dyn2::FIFTY;
    • 更新于2022年1月29日。我发现下面代码片段中的path语句似乎解决了这个问题。出于某种我还不明白的原因,www.example.com不需要这样的语句,但dyn1.rs需要。main.rs, but it is needed in dyn1.rs.
#[path = "./dyn2.rs"]
mod dyn2;
let y = 3 + dyn2::FIFTY;
ogq8wdun

ogq8wdun1#

(1)www.example.com和www.example.com应该使用什么样的mod语句main.rsdyn1.rs,以便main可以同时使用dyn 1和dyn 2项,并且dyn 1可以使用dyn 2项?
您应该在main.rs中使用mod,如下所示

mod dyn1;
 mod dyn2;

此外,在dyn1.rs中添加mod dyn2;
(2)如何调用www.example.com中的fn diagmain.rs?前面的内容是什么?
要调用www.example.com中的diag函数main.rs使用dyn1::diag(...);
(3)在www.example.com的表达式中main.rs?如果x = 3 +::FIFTY;::前面是什么?
不能在函数之外使用let,如果打算将其用作函数,则可以将其用作let x = 3 + dyn2::FIFTY;
(4)在www.example.com的表达式中dyn1.rs?如果x = 3 +::FIFTY;::前面是什么?
与#3完全相同
(5)最后,我的src目录可以只包含main.rs、dyn1.rs和dyn2.rs?吗?或者我必须有子目录吗?至少在逻辑上,我不认为dyn 2是dyn 1的子模块。
您不需要任何子目录
(6)事后想:这个解决方案中的任何地方都需要pub关键字吗?
Pub关键字是必需的,因为它允许您使用其他模块中的const FIFTY。如果它不是公共的,main.rsdyn1.rs就不能使用它

相关问题