我觉得这是一个愚蠢而明显的问题。我有两个文件,它们相互依赖,就像C++中的friend
一样。我目前的解决方案是把所有的代码放在一个大文件中。我如何使用两个文件来代替它们相互调用呢?下面是我的问题的重现
main.rs
mod file0;
pub fn testA() -> i32 {
return 2;
}
fn main() {
println!("Hello", file0::test1());
}
file0.rs
mod main;
pub fn testA() -> i32 {
return main::testB() + 5;
}
1条答案
按热度按时间inb24sb21#
这里的代码有两个问题。第一,
main.rs
在crate根位置隐式创建了一个模块--这样就可以从file0.rs
中删除mod main;
行。第二,当引用条目时,通过crate::
访问crate的根目录-因此return main::testB() + 5;
应该是crate::testB() + 5;
。如果有嵌套的模块,也可以使用super::
来引用父模块,而不是使用可能很长的绝对路径,即return super::testB() + 5;
。下面是一个工作示例:
我还修正了这个例子中的其他一些小问题--函数名不一致,
println
的格式字符串不包含任何占位符。