如何使用来自不同文件的共享逻辑?
How can I use shared logic from different files?
共享逻辑于:
// euler/shared/lib.rs
pub fn foo() {
println!("shared::foo()");
}
如何从不同的文件中使用它:
// euler/001/main.rs
use super::shared; // error: unresolved import `super::shared`
fn main() {
shared::foo(); // how to access it?
}
// euler/002/main.rs
use super::shared; // error: unresolved import `super::shared`
fn main() {
shared::foo(); // how to access it?
}
一种解决方案是从共享代码中创建一个库。这将允许您使用 extern crate
声明。
// euler/shared/shared.rs
pub fn foo() {
println!("shared::foo()");
}
编译库:
$ cd euler/shared
$ rustc --crate-type=lib shared.rs
$ ls -l libshared.rlib
-rw-r--r-- 1 mdup wheel 6758 May 17 14:38 libshared.rlib
以下是您如何在 "client" 代码中使用它:
// euler/001/main.rs
extern crate shared;
fn main() {
shared::foo();
}
编译客户端:
$ cd euler/001
$ rustc -L ../shared main.rs
$ ls -l main
-rwxr-xr-x 1 mdup wheel 291420 May 17 14:42 main
$ ./main
shared::foo()
更多信息见Rust By Example, section "Crates", pages "Library" and "extern crate"。
是正确的,但我鼓励您使用 Rust 的包管理器 Cargo。它将在这里为您做两件非常重要的事情:
- 为
rustc
设置正确的命令行参数。
- 依赖库发生变化时自动重建。
使用cargo new shared
和cargo new --bin euler-001
生成正确的目录结构。将您的共享代码移至 shared/src/lib.rs
并将您的二进制文件移至 euler-001/src/main.rs
:
.
├── euler-001
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── shared
├── Cargo.toml
└── src
└── lib.rs
然后,编辑 euler-001/Cargo.toml
并添加依赖项部分:
[dependencies.shared]
path = "../shared"
并调整您的 main.rs
以了解板条箱:
extern crate shared;
fn main() {
shared::foo();
}
现在,您只需在 euler-001
目录中键入 cargo run
:
$ cargo run
Compiling shared v0.1.0 (file:///private/tmp/play/euler-001)
Compiling euler-001 v0.1.0 (file:///private/tmp/play/euler-001)
Running `target/debug/euler-001`
shared::foo()
请注意,您不必记住命令行参数,系统会为您编译这些内容!有一个内置的包管理器很棒!
共享逻辑于:
// euler/shared/lib.rs
pub fn foo() {
println!("shared::foo()");
}
如何从不同的文件中使用它:
// euler/001/main.rs
use super::shared; // error: unresolved import `super::shared`
fn main() {
shared::foo(); // how to access it?
}
// euler/002/main.rs
use super::shared; // error: unresolved import `super::shared`
fn main() {
shared::foo(); // how to access it?
}
一种解决方案是从共享代码中创建一个库。这将允许您使用 extern crate
声明。
// euler/shared/shared.rs
pub fn foo() {
println!("shared::foo()");
}
编译库:
$ cd euler/shared
$ rustc --crate-type=lib shared.rs
$ ls -l libshared.rlib
-rw-r--r-- 1 mdup wheel 6758 May 17 14:38 libshared.rlib
以下是您如何在 "client" 代码中使用它:
// euler/001/main.rs
extern crate shared;
fn main() {
shared::foo();
}
编译客户端:
$ cd euler/001
$ rustc -L ../shared main.rs
$ ls -l main
-rwxr-xr-x 1 mdup wheel 291420 May 17 14:42 main
$ ./main
shared::foo()
更多信息见Rust By Example, section "Crates", pages "Library" and "extern crate"。
- 为
rustc
设置正确的命令行参数。 - 依赖库发生变化时自动重建。
使用cargo new shared
和cargo new --bin euler-001
生成正确的目录结构。将您的共享代码移至 shared/src/lib.rs
并将您的二进制文件移至 euler-001/src/main.rs
:
.
├── euler-001
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── shared
├── Cargo.toml
└── src
└── lib.rs
然后,编辑 euler-001/Cargo.toml
并添加依赖项部分:
[dependencies.shared]
path = "../shared"
并调整您的 main.rs
以了解板条箱:
extern crate shared;
fn main() {
shared::foo();
}
现在,您只需在 euler-001
目录中键入 cargo run
:
$ cargo run
Compiling shared v0.1.0 (file:///private/tmp/play/euler-001)
Compiling euler-001 v0.1.0 (file:///private/tmp/play/euler-001)
Running `target/debug/euler-001`
shared::foo()
请注意,您不必记住命令行参数,系统会为您编译这些内容!有一个内置的包管理器很棒!