AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

在Rust中處理命令行參數(shù)和環(huán)境變量

來(lái)源: 責(zé)編: 時(shí)間:2023-11-30 17:31:35 266觀看
導(dǎo)讀1.摘要Rust的命令行和環(huán)境變量處理在標(biāo)準(zhǔn)庫(kù)中提供了一整套實(shí)現(xiàn)方法, 在本文中除了探索標(biāo)準(zhǔn)庫(kù)的使用方法之外, 也在不斷適應(yīng)Rust獨(dú)有的語(yǔ)法特點(diǎn)。在本文中, 我們通過(guò)標(biāo)準(zhǔn)庫(kù)函數(shù)的返回值熟悉了迭代器的使用方法, 操作迭

1.摘要

Rust的命令行和環(huán)境變量處理在標(biāo)準(zhǔn)庫(kù)中提供了一整套實(shí)現(xiàn)方法, 在本文中除了探索標(biāo)準(zhǔn)庫(kù)的使用方法之外, 也在不斷適應(yīng)Rust獨(dú)有的語(yǔ)法特點(diǎn)。在本文中, 我們通過(guò)標(biāo)準(zhǔn)庫(kù)函數(shù)的返回值熟悉了迭代器的使用方法, 操作迭代器精確控制保存的內(nèi)容, 包括字符串和鍵值對(duì)的使用方法。uQP28資訊網(wǎng)——每日最新資訊28at.com

uQP28資訊網(wǎng)——每日最新資訊28at.com

2.讀取參數(shù)值

在Rust編程中要讀取命令行參數(shù)的值, 標(biāo)準(zhǔn)庫(kù)提供了一個(gè)函數(shù): std::env::args, 該函數(shù)返回一個(gè)傳遞給命令行參數(shù)的迭代器, 迭代器中保存了所有參數(shù)內(nèi)容, 調(diào)用者需要調(diào)用collect方法將其轉(zhuǎn)換成一個(gè)集合, 先看一段示例代碼:uQP28資訊網(wǎng)——每日最新資訊28at.com

use std::env;fn main() {    let args: Vec<String> = env::args().collect();    dbg!(args);}

在上面的代碼中, 首先使用use語(yǔ)句將std::env模塊引入作用域以便使用它的args函數(shù)。然后調(diào)用其collect()方法, 該方法將接收命令行所有參數(shù)內(nèi)容并保存到變量args中, 接著使用dbg!宏打印了args的內(nèi)容。uQP28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在將這段代碼編譯執(zhí)行會(huì)發(fā)現(xiàn)沒(méi)有任何內(nèi)容輸出, 這是因?yàn)閳?zhí)行運(yùn)行沒(méi)有參數(shù)信息, 現(xiàn)在我們?cè)O(shè)計(jì)一個(gè)場(chǎng)景, 通過(guò)search參數(shù)來(lái)搜索一個(gè)文件, 完整命令如下:uQP28資訊網(wǎng)——每日最新資訊28at.com

cargo run -- search filename.txt

注意: 參數(shù)符號(hào)"--"與參數(shù)名之間有空格。uQP28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行結(jié)果如下:uQP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uQP28資訊網(wǎng)——每日最新資訊28at.com

從返回的結(jié)果來(lái)看, 集合中保存了三個(gè)參數(shù), 實(shí)際上第一個(gè)參數(shù)是我們二進(jìn)制文件名稱, 這跟C語(yǔ)言中的參數(shù)列表的行為很類似, 除了獲取到調(diào)用的程序名稱, 還包括所有以空格隔開(kāi)的參數(shù)名稱。uQP28資訊網(wǎng)——每日最新資訊28at.com

uQP28資訊網(wǎng)——每日最新資訊28at.com

3.將參數(shù)值保存到變量

在上面的例子中, 參數(shù)內(nèi)容保存到了args變量中, 下面修改一下程序,代碼如下:uQP28資訊網(wǎng)——每日最新資訊28at.com

use std::env;fn main() {    let args: Vec<String> = env::args().collect();        let param_name = &args[1];    let file_name = &args[2];        println!("第一個(gè)參數(shù)名:{}", param_name);    println!("第二個(gè)參數(shù)名:{}", file_name);}

在上面的代碼中, 我們根據(jù)數(shù)組索引來(lái)取變量名稱, 例如: args[0]對(duì)應(yīng)是集合中的第一個(gè)元素, 也就是二進(jìn)制程序名, 這個(gè)不是我們需要的, 如果要取參數(shù)search的內(nèi)容, 使用args[1], 取文件名使用args[2], 以此類推。uQP28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行結(jié)果如下:uQP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uQP28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)不同的變量分別接收不同的參數(shù)名, 在程序后面的邏輯中, 就可以使用這些保存獨(dú)立參數(shù)的變量名了。uQP28資訊網(wǎng)——每日最新資訊28at.com

uQP28資訊網(wǎng)——每日最新資訊28at.com

4.處理環(huán)境變量

在std::env模塊中, 標(biāo)準(zhǔn)庫(kù)同樣提供了獲取環(huán)境變量的函數(shù),為: env::vars(), 下面的代碼將把我這臺(tái)電腦的環(huán)境變量全部打印出來(lái):uQP28資訊網(wǎng)——每日最新資訊28at.com

use std::env;fn main() {    for (key, value) in env::vars() {        println!("{} => {}", key, value);    }}

同樣, env::vars()返回的也是一個(gè)迭代器, 不同的是, 數(shù)據(jù)結(jié)構(gòu)是以key:value對(duì)的形式保存, 程序中分別將key和value進(jìn)行打印:uQP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uQP28資訊網(wǎng)——每日最新資訊28at.com

下面我們?cè)诔绦蛑性黾右豁?xiàng)功能, 因?yàn)榇蛴〉膮?shù)實(shí)在太多, 我想把Path環(huán)境變量的內(nèi)容打印出來(lái)該怎么做呢?,修改以下代碼:uQP28資訊網(wǎng)——每日最新資訊28at.com

use std::env;fn main() {    let search_key = "PATH";    match env::var(search_key) {        Ok(val) => {            println!("PATH變量保存的內(nèi)容為:{}", val);        },        Err(e) => println!("無(wú)法找到key:{}, 錯(cuò)誤為:{}", search_key, e)    }}

在上面的代碼中, 我定義了一個(gè)需要搜索的Key名為"PATH", 并使用match正則直接在env::var()的返回迭代器中搜索Key名,這里env::var(param)為什么可以接收參數(shù)呢? 進(jìn)入env.rs源碼可以看到以下代碼:uQP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uQP28資訊網(wǎng)——每日最新資訊28at.com

env::var()接收需要搜索的Key,返回了一個(gè)Result<T, E>類型, 上面還給了一個(gè)使用的示例。uQP28資訊網(wǎng)——每日最新資訊28at.com

從env:var()函數(shù)內(nèi)部,我們可以看到返回的是一個(gè)Result<String, VarError>類型,因此,如果獲取成功,在Ok()宏中可以設(shè)置參數(shù)接收結(jié)果,而使用Err()宏接收可能因失敗返回的錯(cuò)誤, 先看下成功的情況, 打印PATH環(huán)境變量?jī)?nèi)容如下:uQP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uQP28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在再看一個(gè)搜索失敗的情況, 將要搜索的key的內(nèi)容修改為: "SUNTIGER", 執(zhí)行結(jié)果如下:uQP28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片uQP28資訊網(wǎng)——每日最新資訊28at.com

此時(shí)將走另一個(gè)流程, 利用Err()宏打印錯(cuò)誤信息。uQP28資訊網(wǎng)——每日最新資訊28at.com

除此之外, std::env包中還包含其他的一些方法, 例如:設(shè)置環(huán)境變量:set_var()、刪除當(dāng)前運(yùn)行進(jìn)程的環(huán)境變量:remove_var()等,感興趣的可以查看Rust的官方文檔, 這里不再贅述。uQP28資訊網(wǎng)——每日最新資訊28at.com

uQP28資訊網(wǎng)——每日最新資訊28at.com

5.總結(jié)

在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見(jiàn)的兩種方式和處理環(huán)境變量的兩種常見(jiàn)方式, 拋開(kāi)Rust的語(yǔ)法, 實(shí)際上在命令行參數(shù)的處理方式上, 與其它語(yǔ)言大同小異, 可能影響我們習(xí)慣的也就只剩下語(yǔ)法。Rust在某些機(jī)制實(shí)現(xiàn)上跟Go語(yǔ)言比起來(lái)可能略顯繁瑣, 但我們?cè)趯W(xué)習(xí)任何語(yǔ)言的時(shí)候首先要想到每種編程語(yǔ)言的主要特點(diǎn), 例如: Go語(yǔ)言主打一個(gè)語(yǔ)法簡(jiǎn)潔和高并發(fā), 因此學(xué)習(xí)Go語(yǔ)言上手感覺(jué)特別快, 而且在處理高并發(fā)過(guò)程中, Go語(yǔ)言的協(xié)程和通道使用起來(lái)特別容易,性能也非常不錯(cuò)。而Rust的主打特點(diǎn)是內(nèi)存安全, 要將這種安全思想貫穿全局, Rust會(huì)強(qiáng)行轉(zhuǎn)換使用它的每個(gè)人的編程思想, 而Rust編譯器就像映射的鏡子, 任何不好的編程習(xí)慣和疏忽換來(lái)的都是紅色的錯(cuò)誤提示。uQP28資訊網(wǎng)——每日最新資訊28at.com

uQP28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-35580-0.html在Rust中處理命令行參數(shù)和環(huán)境變量

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 僅用 CSS 實(shí)現(xiàn)網(wǎng)頁(yè)閱讀進(jìn)度條

下一篇: 十分鐘搞定前端虛擬列表

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 6月安卓手機(jī)性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過(guò)去了,我們也迎來(lái)了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會(huì)以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領(lǐng)先
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對(duì)象、數(shù)組等,只要不斷地創(chuàng)建這些對(duì)象,并且保證 GC Roots 到對(duì)象之間有可達(dá)路徑來(lái)避免垃 圾收集回收機(jī)制清除這些對(duì)象,當(dāng)這些對(duì)象所占空間超過(guò)
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來(lái)源/華爾街科技眼對(duì)于絕大多數(shù)登山愛(ài)好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國(guó)境內(nèi)的北坡路線。相
  • 大廠卷向扁平化

    來(lái)源:新熵作者丨南枝 編輯丨月見(jiàn)大廠職級(jí)不香了。俗話說(shuō),兵無(wú)常勢(shì),水無(wú)常形,互聯(lián)網(wǎng)企業(yè)調(diào)整職級(jí)體系并不稀奇。7月13日,淘寶天貓集團(tuán)啟動(dòng)了近年來(lái)最大的人力制度改革,目前已形成一
  • 當(dāng)家的盒馬,加速謀生

    來(lái)源 | 價(jià)值星球Planet作者 | 歸去來(lái)自己&ldquo;當(dāng)家&rdquo;的盒馬,開(kāi)始加速謀生了。據(jù)盒馬官微消息,盒馬計(jì)劃今年開(kāi)放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 阿里瓴羊One推出背后,零售企業(yè)迎數(shù)字化新解

    作者:劉曠近年來(lái)隨著數(shù)字經(jīng)濟(jì)的高速發(fā)展,各式各樣的SaaS應(yīng)用服務(wù)更是層出不窮,但本質(zhì)上SaaS大多局限于單一業(yè)務(wù)流層面,對(duì)用戶核心關(guān)切的增長(zhǎng)問(wèn)題等則沒(méi)有提供更好的解法。在Saa
  • 馮提莫簽約抖音公會(huì) 前“斗魚一姐”消失在直播間

    來(lái)源:直播觀察提起&ldquo;馮提莫&rdquo;這個(gè)名字,很多網(wǎng)友或許聽(tīng)過(guò),但應(yīng)該不記得她是哪位主播了。其實(shí),作為曾經(jīng)的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現(xiàn)
  • AMD的AI芯片轉(zhuǎn)單給三星可能性不大 與臺(tái)積電已合作至2nm制程

    據(jù) DIGITIMES 消息,英偉達(dá) AI GPU 出貨逐季飆升,接下來(lái) AMD MI 300 系列將在第 4 季底量產(chǎn)。而半導(dǎo)體業(yè)內(nèi)人士表示,近日傳出 AMD 的 AI 芯片將轉(zhuǎn)單給
  • iQOO Neo8 Pro即將開(kāi)售:到手價(jià)3099元起 安卓性能最強(qiáng)旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會(huì),全新的iQOO Neo8系列也正式與大家見(jiàn)面,包含iQOO Neo8和iQOO Neo8 Pro兩個(gè)版本,其中標(biāo)準(zhǔn)版搭載高通驍龍8+,而Pro版更
Top