欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Rust的標(biāo)準(zhǔn)庫和structopt庫來處理控制臺參數(shù)

科技綠洲 ? 來源:TinyZ ? 作者:TinyZ ? 2023-09-20 11:13 ? 次閱讀

Rust是一種安全、高效的系統(tǒng)編程語言,其標(biāo)準(zhǔn)庫以及外部庫提供了很多處理控制臺參數(shù)的方式。在本篇文章中,我們將分別介紹如何使用Rust的標(biāo)準(zhǔn)庫處理控制臺參數(shù),以及如何使用structopt庫處理控制臺參數(shù)。我們還將介紹如何使用structopt處理復(fù)雜結(jié)構(gòu)參數(shù),并且提供相應(yīng)的示例代碼。

處理控制臺參數(shù)

Rust標(biāo)準(zhǔn)庫提供了處理控制臺參數(shù)的方式,主要基于三個模塊:std::env、std::process和std::os::unix。在下面的例子中,我們將展示如何使用這些模塊來處理控制臺參數(shù):

use std::env;

fn main() {
    let args: Vec< String > = env::args().collect();

    println!("program name is {}", args[0]);

    for arg in args.iter().skip(1) {
        println!("Argument: {}", arg);
        match arg.as_str() {
            "-v" = > println!("version is xxx"),
            "-h" = > println!("Help message"),
            _ = > println!("Unknown argument: {}", arg),
        }
    }
}

在這個例子中,我們使用了std::env::args函數(shù)來獲取命令行參數(shù),該函數(shù)返回一個迭代器,我們需要將其轉(zhuǎn)換為一個向量來方便地處理。接下來,我們使用'iter'函數(shù)和命令行參數(shù)向量創(chuàng)建一個迭代器。我們執(zhí)行了'as_str'函數(shù)將迭代器值轉(zhuǎn)換為其引用,我們再次使用match語句對參數(shù)進(jìn)行篩選,并顯示相應(yīng)的消息。

在處理控制臺參數(shù)時,我們通常需要定義一組選項和參數(shù),這些選項和參數(shù)可以通過命令行傳遞給程序。很明顯假如我們僅使用標(biāo)準(zhǔn)庫提供的API手動解析命令行參數(shù),會非常耗時且麻煩。萬幸的是,Rust社區(qū)提供了開源的structopt庫來幫助我們解析。

使用structopt庫處理控制臺參數(shù)

structopt庫提供了一種定義命令行選項和參數(shù)的方式,并自動生成解析代碼的方法。它使用#[derive]屬性來自動生成解析代碼,這使得處理控制臺參數(shù)變得非常簡單。

首先,我們需要將structopt庫添加到我們的Cargo.toml文件中:

[dependencies]
structopt = "0.3.21"

然后,我們可以使用#[derive]來創(chuàng)建一個結(jié)構(gòu)體,用于定義程序的所有選項和參數(shù)。例如,下面的代碼定義了一個結(jié)構(gòu)體,其中包含一個字符串參數(shù)和兩個布爾選項:

use structopt::StructOpt;

#[derive(Debug, StructOpt)]
struct Opt {
    #[structopt(parse(from_os_str))]
    filename: std::path::PathBuf,
    #[structopt(short = "v", long = "verbose")]
    verbose: bool,
    #[structopt(short = "f", long = "force")]
    force: bool,
}

在上面的代碼中,我們使用#[derive(StructOpt)]屬性來告訴structopt庫自動生成解析代碼。我們還定義了三個字段:一個路徑參數(shù)filename,以及兩個布爾選項verboseforce。在這里,我們將filename字段標(biāo)記為parse(from_os_str),以便自動將其轉(zhuǎn)換為PathBuf類型。

接下來,我們可以在程序的main函數(shù)中使用Opt::from_args()函數(shù)來解析命令行參數(shù)并獲取我們定義的選項和參數(shù):

use structopt::StructOpt;

#[derive(Debug, StructOpt)]
struct Opt {
    #[structopt(parse(from_os_str))]
    filename: std::path::PathBuf,
    #[structopt(short = "v", long = "verbose")]
    verbose: bool,
    #[structopt(short = "f", long = "force")]
    force: bool,
}

fn main() {
    let args = Opt::from_args();
    println!("{:?}", args);
}

上面的代碼將打印出程序的所有選項和參數(shù),例如,如果我們運行./main -v -f /path/to/file.txt,則輸出將是Opt { filename: "/path/to/file.txt", verbose: true, force: true }。

structopt庫還提供了許多其他選項和參數(shù),例如子命令、默認(rèn)值和驗證函數(shù)等。有關(guān)更多詳細(xì)信息,請參見官方文檔。

structopt處理復(fù)雜結(jié)構(gòu)參數(shù)

在處理控制臺參數(shù)時,我們通常需要處理一些復(fù)雜的結(jié)構(gòu)參數(shù),例如具有嵌套字段的結(jié)構(gòu)體或向量。在這種情況下,我們可以使用structopt庫的#[structopt(flatten)]#[structopt(skip)]屬性來解決問題。

首先,讓我們考慮一個具有嵌套字段的結(jié)構(gòu)體。例如,下面的代碼定義了一個包含名稱、年齡和地址的人員結(jié)構(gòu)體,其中地址包含城市、州和國家等嵌套字段:

use structopt::StructOpt;

#[derive(Debug, StructOpt)]
struct Address {
    city: String,
    state: String,
    country: String,
}

#[derive(Debug, StructOpt)]
struct Animal {
    name: String,
    age: u8,
    #[structopt(flatten)]
    address: Address,
}

fn main() {
    let args = Animal::from_args();
    println!("{:?}", args);
}

在上面的代碼中,我們使用#[structopt(flatten)]屬性將Address結(jié)構(gòu)體的字段展開到Animal結(jié)構(gòu)體中?,F(xiàn)在,我們可以將Animal結(jié)構(gòu)體作為命令行參數(shù)傳遞給程序:

$ ./main --name Tom --age 30 --city Chengdu --state Chengdu --country China

上面的命令將創(chuàng)建一個Animal結(jié)構(gòu)體,其中包含名稱為Tom、年齡為30歲、地址為北京市、北京市、中國的人員信息。

接下來,讓我們考慮一個包含向量字段的結(jié)構(gòu)體。例如,下面的代碼定義了一個包含名稱、年齡和朋友列表的人員結(jié)構(gòu)體:

use structopt::StructOpt;

#[derive(Debug, StructOpt)]
struct Animal {
    name: String,
    age: u8,
    #[structopt(skip)]
    friends: Vec< String >,
}

fn main() {
    let args = Animal::from_args();
    println!("{:?}", args);
}

在上面的代碼中,我們使用#[structopt(skip)]屬性將friends字段跳過,因為我們將使用自定義代碼來處理它?,F(xiàn)在,我們可以將Animal結(jié)構(gòu)體作為命令行參數(shù)傳遞給程序:

$ ./main --name Tom --age 30 --friends Bob --friends Charlie --friends Dave

上面的命令將創(chuàng)建一個Animal結(jié)構(gòu)體,其中包含名稱為Tom、年齡為30歲、朋友列表包含Bob、Charlie和Dave的人員信息。我們還需要手動將命令行參數(shù)中的朋友列表轉(zhuǎn)換為向量字段。我們可以使用std::iter::FromIterator trait來將命令行參數(shù)轉(zhuǎn)換為向量字段:

use structopt::StructOpt;

#[derive(Debug, StructOpt)]
struct Animal {
    name: String,
    age: u8,
    #[structopt(skip)]
    friends: Vec< String >,
}

impl Animal {
    fn from_args() - > Self {
        let mut args = Vec::from_iter(std::env::args());
        let friends = args
            .iter()
            .enumerate()
            .filter_map(|(i, arg)| if i > 0 && args[i - 1] == "--friends" { Some(arg) } else { None })
            .map(|arg| arg.to_owned())
            .collect();
        let args = Animal::clap().get_matches_from(args);
        let name = args.value_of("name").unwrap().to_owned();
        let age = args.value_of("age").unwrap().parse().unwrap();
        Animal { name, age, friends }
    }
}

fn main() {
    let args = Animal::from_args();
    println!("{:?}", args);
}

上面的代碼使用std::env::args()函數(shù)獲取命令行參數(shù),并使用Vec::from_iter()函數(shù)將其轉(zhuǎn)換為向量。然后,我們使用filter_map()函數(shù)和enumerate()函數(shù)來獲取命令行參數(shù)中的朋友列表。接下來,我們使用std::iter::FromIterator trait將朋友列表轉(zhuǎn)換為向量,并將其存儲在friends字段中。最后,我們使用Animal::clap().get_matches_from()函數(shù)來解析其他選項和參數(shù),并使用nameage字段創(chuàng)建一個Animal結(jié)構(gòu)體。

結(jié)論

在本教程中,我們介紹了如何使用Rust的標(biāo)準(zhǔn)庫和structopt庫來處理控制臺參數(shù)。我們討論了處理簡單參數(shù)和選項的方法,以及處理復(fù)雜結(jié)構(gòu)參數(shù)的方法。structopt庫提供了一種簡單而強大的方式來定義命令行選項和參數(shù),并自動生成解析代碼。如果您需要處理控制臺參數(shù),那么structopt庫是您的最佳選擇。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2736

    瀏覽量

    47777
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1860

    瀏覽量

    32443
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1951

    瀏覽量

    35007
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4830

    瀏覽量

    69110
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    230

    瀏覽量

    6673
收藏 人收藏

    評論

    相關(guān)推薦

    如何在Rust中連接和使用MySQL數(shù)據(jù)

    MySQL是一個廣泛使用的關(guān)系型數(shù)據(jù)Rust作為一門相對較新的系統(tǒng)級編程語言,具有C語言般的高性能、安全、并發(fā)等特性,因此與MySQL一起使用是一種非常有趣的選擇。在本教程中,我們將手把手地展示
    的頭像 發(fā)表于 09-30 17:05 ?1782次閱讀

    如何利用C語言去調(diào)用rust靜態(tài)

    新語言的感覺,要做不少的對接工作。也用過Lua,感覺也差不多。評估學(xué)習(xí)評估Rust語言時,感覺性能和體積應(yīng)該都不會有太大的問題。加上語言本身主打的安全性,再結(jié)合一些,用來做一些C語言不擅長的動態(tài)操作
    發(fā)表于 06-21 10:27

    SCVMM 2008 R2管理控制臺介紹

    /SCSI硬盤配置等。根據(jù)企業(yè)生產(chǎn)環(huán)境中存在的或是將要上線的業(yè)務(wù)系統(tǒng)的不同要求,可以創(chuàng)建多個硬件配置文件,從而實現(xiàn)不同類型業(yè)務(wù)虛擬機的硬件標(biāo)準(zhǔn)化。打開VMM R2的管理員控制臺,導(dǎo)航至,并在左上的視圖
    發(fā)表于 10-24 16:55

    Rust代碼中加載靜態(tài)時,出現(xiàn)錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    我正在 MCUXpresso IDE 中創(chuàng)建一個靜態(tài)。我正在使用 redlib 在我的代碼中導(dǎo)入 ` [i]stdlib.h`。它成功地構(gòu)建了一個靜態(tài)。但是,靜態(tài)中未定義一些標(biāo)準(zhǔn)
    發(fā)表于 06-09 08:44

    dmx512控制臺是什么_dmx512控制臺按鍵說明

    DMX512控制臺是什么?DMX512控制臺的按鍵又有哪些? DMX512控制臺定義 控制臺是存放管理工具的框架,包括文件夾和其他容器、網(wǎng)頁和其他管理項。
    發(fā)表于 11-07 11:20 ?2.7w次閱讀

    SU RUBy控制臺如何使用?SU RUBy控制臺的一個應(yīng)用實例說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是SU RUBy控制臺如何使用?SU RUBy控制臺的一個應(yīng)用實例說明。
    發(fā)表于 09-27 16:04 ?0次下載

    Rust GUI 發(fā)展現(xiàn)狀

    Rust GUI 發(fā)展現(xiàn)狀 最近有一篇關(guān)于 Rust GUI 的博客,這不,kas?這個? Another GUI toolkit ?框架也針對 Rust 的 GUI 框架現(xiàn)狀進(jìn)行了
    的頭像 發(fā)表于 12-21 15:00 ?2698次閱讀

    什么是數(shù)據(jù)

    在RDS控制臺,創(chuàng)建數(shù)據(jù)、高權(quán)限賬號以及將賬號賦予數(shù)據(jù)權(quán)限
    的頭像 發(fā)表于 02-20 16:07 ?1511次閱讀
    什么是數(shù)據(jù)<b class='flag-5'>庫</b>

    基于Rust的Log日志介紹

    Rust是一門系統(tǒng)級編程語言,因其安全性、高性能和并發(fā)性而備受歡迎。在Rust應(yīng)用程序中,日志記錄是一項非常重要的任務(wù),因為它可以幫助開發(fā)人員了解應(yīng)用程序的運行情況并解決問題。Rust的Log
    的頭像 發(fā)表于 09-19 14:49 ?3573次閱讀

    Rust標(biāo)準(zhǔn)的功能劃分

    對于大部分軟件開發(fā)工程師而言,他們用Rust主要開發(fā)應(yīng)用層軟件,也就是運行在用戶空間的程序。它們基于標(biāo)準(zhǔn)編寫,實現(xiàn)各種業(yè)務(wù)功能。應(yīng)用層的軟件并非所有模塊和函數(shù)都涉及到系統(tǒng)調(diào)用(例如一些用于操作字符串和
    的頭像 發(fā)表于 10-29 17:17 ?1423次閱讀
    <b class='flag-5'>Rust</b>的<b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>庫</b>的功能劃分

    FastTime-純Rust編寫的高并發(fā)快速時間

    FastTime, 純Rust編寫的快速時間, 并發(fā): 2800萬+/秒. 一、組件
    的頭像 發(fā)表于 11-06 09:23 ?690次閱讀

    weblogic控制臺配置jvm參數(shù)

    將詳細(xì)介紹如何在WebLogic控制臺中配置JVM參數(shù),并提供一些常見的配置建議。 首先,我們需要了解JVM參數(shù)對應(yīng)的不同類型。JVM參數(shù)可以分為標(biāo)
    的頭像 發(fā)表于 12-05 14:48 ?2939次閱讀

    基于Rust的嵌入式符合ACID的鍵值數(shù)據(jù)

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的鍵值數(shù)據(jù)
    的頭像 發(fā)表于 12-28 11:29 ?919次閱讀

    火語言RPA如何建立控制臺應(yīng)用

    火語言通過軟件自帶的豐富的顆粒組件,開發(fā)出滿足各種需求的應(yīng)用?;鹫Z言中的應(yīng)用分為兩種常見類型,界面應(yīng)用以及控制臺應(yīng)用。 下面詳細(xì)介紹下控制臺應(yīng)用的定義以及構(gòu)建方法。 控制臺應(yīng)用
    的頭像 發(fā)表于 08-15 09:24 ?481次閱讀
    火語言RPA如何建立<b class='flag-5'>控制臺</b>應(yīng)用

    控制臺窗口主機是什么

    主機是Windows操作系統(tǒng)中的一個系統(tǒng)進(jìn)程,它負(fù)責(zé)管理和控制控制臺窗口的顯示和行為。 功能 : 承載控制臺窗口:conhost.exe進(jìn)程是控制臺窗口的宿主進(jìn)程,它負(fù)責(zé)創(chuàng)建和顯示
    的頭像 發(fā)表于 10-08 18:12 ?2798次閱讀