簡體   English   中英

如何使用不同文件中的共享邏輯?

[英]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?
}

mdup的答案是正確的,但我鼓勵您使用Rust的軟件包管理器Cargo。 在這里,它將為您做兩件非常重要的事情:

  1. rustc設置正確的命令行參數。
  2. 依賴庫更改時自動重建。

使用cargo new sharedcargo new --bin euler-001生成正確的目錄結構。 將共享代碼移至shared/src/lib.rs ,將二進制文件移至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()

請注意,您不必記住命令行參數,一切都將為您編譯! 擁有內置的包管理器很棒!

一種解決方案是根據共享代碼創建一個庫。 這將允許您使用extern crate聲明。

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

編譯lib:

$ 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

這是在“客戶端”代碼中使用它的方式:

// 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的更多信息,“板條箱”部分, “庫”“外部板條箱”頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM