如何使用不同文件的共享逻辑?

Mir*_*sin 1 rust

共享逻辑:

// euler/shared/lib.rs

pub fn foo() {
    println!("shared::foo()");
}
Run Code Online (Sandbox Code Playgroud)

我如何从不同的文件中使用它:

// euler/001/main.rs

use super::shared; // error: unresolved import `super::shared`

fn main() {
  shared::foo(); // how to access it?
}
Run Code Online (Sandbox Code Playgroud)
// euler/002/main.rs

use super::shared; // error: unresolved import `super::shared`

fn main() {
  shared::foo(); // how to access it?
}
Run Code Online (Sandbox Code Playgroud)

She*_*ter 5

mdup的回答是正确的,但我鼓励你使用Rust的包装经理Cargo.它会为你做两件非常重要的事情:

  1. 设置正确的命令行参数rustc.
  2. 更改时自动重建依赖库.

使用cargo new sharedcargo 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
Run Code Online (Sandbox Code Playgroud)

然后,编辑euler-001/Cargo.toml并添加依赖项部分:

[dependencies.shared]
path = "../shared"
Run Code Online (Sandbox Code Playgroud)

并调整你main.rs的知识箱子:

extern crate shared;

fn main() {
    shared::foo();
}
Run Code Online (Sandbox Code Playgroud)

现在,你可以简单地输入cargo runeuler-001目录:

$ 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()
Run Code Online (Sandbox Code Playgroud)

请注意,您不必记住命令行参数,并为您编译内容!拥有内置的包管理器非常棒!