日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

在Rust中處理命令行參數和環境變量

來源: 責編: 時間:2023-11-30 17:31:35 234觀看
導讀1.摘要Rust的命令行和環境變量處理在標準庫中提供了一整套實現方法, 在本文中除了探索標準庫的使用方法之外, 也在不斷適應Rust獨有的語法特點。在本文中, 我們通過標準庫函數的返回值熟悉了迭代器的使用方法, 操作迭

1.摘要

Rust的命令行和環境變量處理在標準庫中提供了一整套實現方法, 在本文中除了探索標準庫的使用方法之外, 也在不斷適應Rust獨有的語法特點。在本文中, 我們通過標準庫函數的返回值熟悉了迭代器的使用方法, 操作迭代器精確控制保存的內容, 包括字符串和鍵值對的使用方法。8la28資訊網——每日最新資訊28at.com

8la28資訊網——每日最新資訊28at.com

2.讀取參數值

在Rust編程中要讀取命令行參數的值, 標準庫提供了一個函數: std::env::args, 該函數返回一個傳遞給命令行參數的迭代器, 迭代器中保存了所有參數內容, 調用者需要調用collect方法將其轉換成一個集合, 先看一段示例代碼:8la28資訊網——每日最新資訊28at.com

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

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

現在將這段代碼編譯執行會發現沒有任何內容輸出, 這是因為執行運行沒有參數信息, 現在我們設計一個場景, 通過search參數來搜索一個文件, 完整命令如下:8la28資訊網——每日最新資訊28at.com

cargo run -- search filename.txt

注意: 參數符號"--"與參數名之間有空格。8la28資訊網——每日最新資訊28at.com

執行結果如下:8la28資訊網——每日最新資訊28at.com

圖片圖片8la28資訊網——每日最新資訊28at.com

從返回的結果來看, 集合中保存了三個參數, 實際上第一個參數是我們二進制文件名稱, 這跟C語言中的參數列表的行為很類似, 除了獲取到調用的程序名稱, 還包括所有以空格隔開的參數名稱。8la28資訊網——每日最新資訊28at.com

8la28資訊網——每日最新資訊28at.com

3.將參數值保存到變量

在上面的例子中, 參數內容保存到了args變量中, 下面修改一下程序,代碼如下:8la28資訊網——每日最新資訊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!("第一個參數名:{}", param_name);    println!("第二個參數名:{}", file_name);}

在上面的代碼中, 我們根據數組索引來取變量名稱, 例如: args[0]對應是集合中的第一個元素, 也就是二進制程序名, 這個不是我們需要的, 如果要取參數search的內容, 使用args[1], 取文件名使用args[2], 以此類推。8la28資訊網——每日最新資訊28at.com

執行結果如下:8la28資訊網——每日最新資訊28at.com

圖片圖片8la28資訊網——每日最新資訊28at.com

通過不同的變量分別接收不同的參數名, 在程序后面的邏輯中, 就可以使用這些保存獨立參數的變量名了。8la28資訊網——每日最新資訊28at.com

8la28資訊網——每日最新資訊28at.com

4.處理環境變量

在std::env模塊中, 標準庫同樣提供了獲取環境變量的函數,為: env::vars(), 下面的代碼將把我這臺電腦的環境變量全部打印出來:8la28資訊網——每日最新資訊28at.com

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

同樣, env::vars()返回的也是一個迭代器, 不同的是, 數據結構是以key:value對的形式保存, 程序中分別將key和value進行打印:8la28資訊網——每日最新資訊28at.com

圖片圖片8la28資訊網——每日最新資訊28at.com

下面我們在程序中增加一項功能, 因為打印的參數實在太多, 我想把Path環境變量的內容打印出來該怎么做呢?,修改以下代碼:8la28資訊網——每日最新資訊28at.com

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

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

圖片圖片8la28資訊網——每日最新資訊28at.com

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

從env:var()函數內部,我們可以看到返回的是一個Result<String, VarError>類型,因此,如果獲取成功,在Ok()宏中可以設置參數接收結果,而使用Err()宏接收可能因失敗返回的錯誤, 先看下成功的情況, 打印PATH環境變量內容如下:8la28資訊網——每日最新資訊28at.com

圖片圖片8la28資訊網——每日最新資訊28at.com

現在再看一個搜索失敗的情況, 將要搜索的key的內容修改為: "SUNTIGER", 執行結果如下:8la28資訊網——每日最新資訊28at.com

圖片圖片8la28資訊網——每日最新資訊28at.com

此時將走另一個流程, 利用Err()宏打印錯誤信息。8la28資訊網——每日最新資訊28at.com

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

8la28資訊網——每日最新資訊28at.com

5.總結

在本章節中, 我們探討了Rust處理命令行參數的常見的兩種方式和處理環境變量的兩種常見方式, 拋開Rust的語法, 實際上在命令行參數的處理方式上, 與其它語言大同小異, 可能影響我們習慣的也就只剩下語法。Rust在某些機制實現上跟Go語言比起來可能略顯繁瑣, 但我們在學習任何語言的時候首先要想到每種編程語言的主要特點, 例如: Go語言主打一個語法簡潔和高并發, 因此學習Go語言上手感覺特別快, 而且在處理高并發過程中, Go語言的協程和通道使用起來特別容易,性能也非常不錯。而Rust的主打特點是內存安全, 要將這種安全思想貫穿全局, Rust會強行轉換使用它的每個人的編程思想, 而Rust編譯器就像映射的鏡子, 任何不好的編程習慣和疏忽換來的都是紅色的錯誤提示。8la28資訊網——每日最新資訊28at.com

8la28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-35580-0.html在Rust中處理命令行參數和環境變量

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 僅用 CSS 實現網頁閱讀進度條

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

標簽:
  • 熱門焦點
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • OPPO、vivo、小米等國內廠商Q2在印度智能手機市場份額依舊高達55%

    7月20日消息,據外媒報道,研究機構的報告顯示,在全球智能手機出貨量同比仍在下滑的大背景下,印度這一有潛力的市場也未能幸免,出貨量同比也有下滑,多家廠
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
Top 主站蜘蛛池模板: 临洮县| 嵩明县| 清流县| 毕节市| 罗城| 隆子县| 女性| 江川县| 堆龙德庆县| 永安市| 德惠市| 宿松县| 北流市| 宜君县| 肇庆市| 黄大仙区| 麻城市| 眉山市| 交口县| 高州市| 平塘县| 昂仁县| 天水市| 苏尼特左旗| 富阳市| 甘德县| 兰西县| 漾濞| 伊通| 开化县| 股票| 贵定县| 罗田县| 六安市| 克拉玛依市| 锡林郭勒盟| 北票市| 金沙县| 平安县| 乌鲁木齐县| 井陉县|