如何使用来自不同文件的共享逻辑? [英] How can I use shared logic from different files?

查看:28
本文介绍了如何使用来自不同文件的共享逻辑?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

共享逻辑:

//euler/shared/lib.rs酒吧 fn foo() {println!("shared::foo()");}

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

//euler/001/main.rs使用超级::共享;//错误:未解析的导入 `super::shared`fn 主(){共享::foo();//如何访问它?}

//euler/002/main.rs使用超级::共享;//错误:未解析的导入 `super::shared`fn 主(){共享::foo();//如何访问它?}

解决方案

mdup 的答案 是正确的,但我会鼓励你使用 Cargo,Rust 的包管理器.它将在这里为您做两件非常重要的事情:

  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└── 共享├── Cargo.toml└── src└── lib.rs

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

[dependencies.shared]路径 = "../shared"

并调整您的 main.rs 以了解板条箱:

extern crate shared;fn 主(){共享::foo();}

现在,您只需在 euler-001 目录中输入 cargo run 即可:

$ 货物运行编译共享 v0.1.0 (file:///private/tmp/play/euler-001)编译euler-001 v0.1.0 (file:///private/tmp/play/euler-001)运行`target/debug/euler-001`共享::foo()

请注意,您不必记住命令行参数,并且会为您编译!有一个内置的包管理器很棒!

Having shared logic in:

// euler/shared/lib.rs

pub fn foo() {
    println!("shared::foo()");
}

How can I use it from different files:

// 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?
}

解决方案

mdup's answer is correct, but I'd encourage you to use Cargo, Rust's package manager. It will do two very important things for you here:

  1. Set up the correct command line arguments to rustc.
  2. Automatically rebuild the dependent libraries when they change.

Use cargo new shared and cargo new --bin euler-001 to generate the right directory structure. Move your shared code to shared/src/lib.rs and your binaries to euler-001/src/main.rs:

.
├── euler-001
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── shared
    ├── Cargo.toml
    └── src
        └── lib.rs

Then, edit euler-001/Cargo.toml and add the dependencies section:

[dependencies.shared]
path = "../shared"

And tweak your main.rs to know about the crate:

extern crate shared;

fn main() {
    shared::foo();
}

Now, you can simply type cargo run in the euler-001 directory:

$ 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()

Note that you don't have to remember command line arguments and things are compiled for you! Having a built-in package manager is great!

这篇关于如何使用来自不同文件的共享逻辑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆