rust 是否调用同级文件中的函数?

2fjabf4q  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(351)

我觉得这是一个愚蠢而明显的问题。我有两个文件,它们相互依赖,就像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;
}
inb24sb2

inb24sb21#

这里的代码有两个问题。第一,main.rs在crate根位置隐式创建了一个模块--这样就可以从file0.rs中删除mod main;行。第二,当引用条目时,通过crate::访问crate的根目录-因此return main::testB() + 5;应该是crate::testB() + 5;。如果有嵌套的模块,也可以使用super::来引用父模块,而不是使用可能很长的绝对路径,即return super::testB() + 5;
下面是一个工作示例:

// main.rs
mod file0;
pub fn testB() -> i32 {
  return 2;
}
fn main() {
    println!("Hello - {}", file0::testA());
}

// file0.rs
pub fn testA() -> i32 {
  return crate::testB() + 5;
  // alternatively:
  // return super::testB() + 5;
}

我还修正了这个例子中的其他一些小问题--函数名不一致,println的格式字符串不包含任何占位符。

相关问题