有很多关于使用模块的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的正确方法是什么?
答案 0 :(得分:10)
您必须在某处包含b.rs
,通常包含mod b;
。如果b
是a
的孩子(而不是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