日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

詳解Rust中的workspace_相關(guān)技巧

作者:菩提樹(shù)下的楊過(guò) ? 更新時(shí)間: 2022-05-23 編程語(yǔ)言

java項(xiàng)目中用maven管理代碼時(shí),如果遇到大型工程,一般會(huì)拆分成不同的模塊,比如spring-mvc中,通常會(huì)按model, view, controller建3個(gè)模塊,然后根據(jù)一定的依賴(lài)關(guān)系進(jìn)行引用。這個(gè)概念在Rust中是通用的,只不過(guò)maven換成了cargo,而模塊變成了crate,看下面的例子。

一、目錄結(jié)構(gòu)

.
├── Cargo.toml
├── controller
│ ? ├── Cargo.toml
│ ? └── src
│ ? ? ? └── main.rs
├── model
│ ? ├── Cargo.toml
│ ? └── src
│ ? ? ? └── lib.rs
└── view
? ? ├── Cargo.toml
? ? └── src
? ? ? ? └── lib.rs

根目錄下的Cargo.toml,類(lèi)似maven中的父pom.xml,可以在其中聲明子"模塊":(注:為了避免與rust中的mod"模塊"產(chǎn)生混淆,后面還是用crate來(lái)稱(chēng)呼“子模塊”)

[workspace]
members=[
? ? "model",
? ? "view",
? ? "controller"
]

這里聲明了1個(gè)所謂的workspace,其中有3個(gè)成員,即3個(gè)目錄對(duì)應(yīng)的crate  

二、子crata中的Cargo.toml聲明

假設(shè)上面的工程結(jié)構(gòu)中:

  • model不依賴(lài)其它c(diǎn)rate
  • view依賴(lài)model
  • controller依賴(lài)view及model

則這3個(gè)crate中的Cargo.toml文件,可以這樣寫(xiě):

model/Cargo.toml

[package]
name = "model"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
# 不依賴(lài)其它c(diǎn)rate,此節(jié)點(diǎn)為空即可

view/Cargo.toml

[package]
name = "view"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
# 聲明依賴(lài)model
model = {path = "../model"}

controll/Cargo.toml

[package]
name = "controller"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
model = {path = "../model"}
view = {path = "../view"}

三、代碼引用

有了前面的各crate依賴(lài)聲明,就可以來(lái)寫(xiě)代碼了,參見(jiàn)下面的示例:

3.1 model/src/lib.rs

#[derive(Debug)]
pub struct User{
   pub username:String,
   pub password:String
}
#[derive(Debug)]
pub struct Order{
    pub orderno:St

假設(shè)在model中定義了2個(gè)結(jié)構(gòu)體(即:OOP中的class)

3.2 view/src/lib.rs

//使用model中的User類(lèi)
use model::User;
pub fn get_login_info(name:String,pass:String)->User{
    User{
        username:name,
        password:pass
    }
}

3.3 controller/src/main.rs

use view::get_login_info;
use model::{User,Order};
fn main() {
    let mut u = get_login_info(String::from("test"), String::from("123456"));
    u.password = String::from("abcde");
    println!("{:?}", u);
 
    let o = Order{
        orderno:String::from("20211244123")
    };
    println!("{:?}",o);
 
    let u1 = User{
        username:String::from("abcd"),
        password:String::from("*123*J")
    };
    println!("{:?}",u1);
}

運(yùn)行結(jié)果:

User { username: "test", password: "abcde" }
Order { orderno: "20211244123" }
User { username: "abcd", password: "*123*J" }

原文鏈接:https://www.cnblogs.com/yjmyzz/p/15586087.html

相關(guān)推薦

欄目分類(lèi)
最近更新