如何在Rust货运项目中使用另一个模块中的一个模块?

时间:2018-01-03 05:10:48

标签: module rust

有很多关于使用模块的Rust documentation,但是我没有找到具有多个模块的Cargo二进制文件的示例,其中一个模块使用另一个模块。我的例子在src文件夹中有三个文件。模块a和b处于同一级别。一个不是另一个的子模块。

main.rs:

<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
</head>
<body>
  <div class="container">
  <p class="lead">Please Choose one in the following</p>
 <form>
<select class="custom-select" id="select">
  <option class="active">Choose one...</option>
<option>Boots</option>
<option>Socks</option>
<option>tie</option>
</select>
  </form><br>
<p id="show" class="lead">

</p>
  </div>
</body>

a.rs:

mod a;

fn main() {
    println!("Hello, world!");
    a::a();
}

和b.rs:

pub fn a() {
    println!("A");
    b::b();
}

我在a.rs中尝试了pub fn b() { println!("B"); } use b的变体,但我无法编译这段代码。例如,如果我尝试使用mod b,则会收到以下错误:

use b

让Rust认识到我想在货物应用程序中使用模块a中的模块b的正确方法是什么?

2 个答案:

答案 0 :(得分:10)

您必须在某处包含b.rs,通常包含mod b;。如果ba的孩子(而不是a的兄弟姐妹),有两种方法可以做到这一点:

  • 推荐:将a.rs重命名为a/mod.rs,将b.rs重命名为a/b.rs。然后,您可以mod b;中的a/mod.rs
  • 相反,您可以#[path = "b.rs"] mod b; a.rs而不重命名来源。

如果b打算成为a的兄弟(而不是a的孩子),则可以mod b;中的main.rs和然后在use b;a.rs

答案 1 :(得分:5)

对于接受的答案的Rust版本1.33兄弟方法对我来说不起作用。

相反,我使用了同级mod:

use crate::b;

编辑:拼写错误的单词 crate