亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

rust標準庫std::env環(huán)境相關的常量

 更新時間:2024年03月26日 11:21:37   作者:1024小神  
在本章節(jié)中, 我們探討了Rust處理命令行參數的常見的兩種方式和處理環(huán)境變量的兩種常見方式, 拋開Rust的語法, 實際上在命令行參數的處理方式上, 與其它語言大同小異, 可能影響我們習慣的也就只剩下語法,本文介紹rust標準庫std::env的相關知識,感興趣的朋友一起看看吧

rust標準庫std::env環(huán)境相關的常量

在env這個庫中,有一些環(huán)境相關的常量,這些常量在std::env::consts這個模塊下面,通過這個依賴庫可以獲取到當前程序所運行的環(huán)境和運行的目錄地址等信息。

env 常量

std::env下面一些系統相關的常量:

ARCH	
DLL_EXTENSION
DLL_PREFIX	
DLL_SUFFIX	
EXE_EXTENSION
EXE_SUFFIX	
FAMILY
OS

我們在ubuntu下將這些常量打印出來看一下:

    use std::env;
    println!("ARCH = {}", env::consts::ARCH);
    println!("DLL_EXTENSION = {}", env::consts::DLL_EXTENSION);
    println!("DLL_PREFIX = {}", env::consts::DLL_PREFIX);
    println!("DLL_SUFFIX = {}", env::consts::DLL_SUFFIX);
    println!("EXE_EXTENSION = {}", env::consts::EXE_EXTENSION);
    println!("EXE_SUFFIX = {}", env::consts::EXE_SUFFIX);
    println!("FAMILY = {}", env::consts::FAMILY);
    println!("OS = {}", env::consts::OS);
// 顯示結果:
ARCH = x86_64
DLL_EXTENSION = so
DLL_PREFIX = lib
DLL_SUFFIX = .so
EXE_EXTENSION = 
EXE_SUFFIX = 
FAMILY = unix
OS = linux

常用函數 

std::env模塊下有如下函數:

args	返回命令行傳遞的參數
args_os	返回當前進程的參數
current_dir	返回當前的工作目錄,該目錄保存在PathBuf中
current_exe	返回當前可執(zhí)行程序的全路徑
home_dir	返回當前用戶目錄的路徑
join_paths	添加一些環(huán)境變量到PATH這個變量中
remove_var	刪除當前運行進程的環(huán)境變量(系統中的環(huán)境變量不會改變,只改變當前進程的環(huán)境變量)
set_current_dir	指定當前可執(zhí)行程序的工作目錄
set_var	將當前進程的環(huán)境變量修改為新的值
split_paths	Parses input according to platform conventions for the PATH environment variable.
temp_dir	返回臨時文件所存放的目錄
var	從當前進程獲取環(huán)境變量,通過環(huán)境變量的key值獲取value值
var_os	Fetches the environment variable key from the current process, returning None if the variable isn't set.
vars	Returns an iterator of (variable, value) pairs of strings, for all the environment variables of the current process.
vars_os	Returns an iterator of (variable, value) pairs of OS strings, for all the environment variables of the current process.

補充:

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

1.摘要

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

2.讀取參數值

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

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

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

現在將這段代碼編譯執(zhí)行會發(fā)現沒有任何內容輸出, 這是因為執(zhí)行運行沒有參數信息, 現在我們設計一個場景, 通過search參數來搜索一個文件, 完整命令如下:

cargo run -- search filename.txt

注意: 參數符號"--"與參數名之間有空格。

執(zhí)行結果如下:

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

3.將參數值保存到變量

在上面的例子中, 參數內容保存到了args變量中, 下面修改一下程序,代碼如下:

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], 以此類推。

執(zhí)行結果如下:

通過不同的變量分別接收不同的參數名, 在程序后面的邏輯中, 就可以使用這些保存獨立參數的變量名了。

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

在std::env模塊中, 標準庫同樣提供了獲取環(huán)境變量的函數,為: env::vars(), 下面的代碼將把我這臺電腦的環(huán)境變量全部打印出來:

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

同樣, env::vars()返回的也是一個迭代器, 不同的是, 數據結構是以key:value對的形式保存, 程序中分別將key和value進行打印:

下面我們在程序中增加一項功能, 因為打印的參數實在太多, 我想把Path環(huán)境變量的內容打印出來該怎么做呢?,修改以下代碼:

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源碼可以看到以下代碼:

env::var()接收需要搜索的Key,返回了一個Result<T, E>類型, 上面還給了一個使用的示例。

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

現在再看一個搜索失敗的情況, 將要搜索的key的內容修改為: "SUNTIGER", 執(zhí)行結果如下:

此時將走另一個流程, 利用Err()宏打印錯誤信息。

除此之外, std::env包中還包含其他的一些方法, 例如:設置環(huán)境變量:set_var()、刪除當前運行進程的環(huán)境變量:remove_var()等,感興趣的可以查看Rust的官方文檔, 這里不再贅述。

5.總結

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

到此這篇關于rust標準庫std::env環(huán)境相關的常量的文章就介紹到這了,更多相關rust標準庫std::env內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • rust 如何使用 cargo-nextest 替代 cargo test

    rust 如何使用 cargo-nextest 替代 cargo te

    cargo-nextest 是新一代的rust測試程序,能夠極大提升測試性能,可以完全替代 cargo test 命令,這篇文章主要介紹了rust 如何使用 cargo-nextest 替代 cargo test,需要的朋友可以參考下
    2024-05-05
  • Rust Struct結構體詳解

    Rust Struct結構體詳解

    結構體,是一種自定義數據類型,允許程序員將不同類型的數據結合起來,形成相關聯的整體。Rust的結構體還提供方法和關聯函數,可以指定那些與結構體數據相關的行為
    2022-10-10
  • 在win10上使用mingw64編譯器配置Rust開發(fā)環(huán)境和idea 配置Rust 插件

    在win10上使用mingw64編譯器配置Rust開發(fā)環(huán)境和idea 配置Rust 插件

    在win10上配置 Rust 開發(fā)環(huán)境(使用 mingw64編譯器)和 idea 配置 Rust 插件的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-03-03
  • 深入了解Rust的切片使用

    深入了解Rust的切片使用

    除了引用,Rust?還有另外一種不持有所有權的數據類型:切片(slice),切片允許我們引用集合中某一段連續(xù)的元素序列,而不是整個集合。本文讓我們來深入了解Rust的切片
    2022-11-11
  • 關于使用rust調用c++靜態(tài)庫并編譯nodejs包的問題

    關于使用rust調用c++靜態(tài)庫并編譯nodejs包的問題

    這篇文章主要介紹了使用rust調用c++靜態(tài)庫并編譯nodejs包的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Rust應用調用C語言動態(tài)庫的操作方法

    Rust應用調用C語言動態(tài)庫的操作方法

    這篇文章主要介紹了Rust應用調用C語言動態(tài)庫,本文記錄了筆者編寫一個簡單的C語言動態(tài)庫,并通過Rust調用動態(tài)庫導出的函數,需要的朋友可以參考下
    2023-01-01
  • Rust生命周期常見誤區(qū)(中英對照)全面指南

    Rust生命周期常見誤區(qū)(中英對照)全面指南

    這篇文章主要WEIDJAI?介紹了Rust生命周期常見誤區(qū)(中英對照)的全面指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 解析Rust?struct?中的生命周期

    解析Rust?struct?中的生命周期

    rust?的生命周期保證了內存的安全性,同時也增加了開發(fā)者的心智負擔。是在上線之前多費心思寫代碼,還是在上線以后忙忙活活查問題,這是個?trade?off?問題,這篇文章主要介紹了Rust?struct?中的生命周期,需要的朋友可以參考下
    2022-10-10
  • Rust編寫自動化測試實例權威指南

    Rust編寫自動化測試實例權威指南

    這篇文章主要為大家介紹了Rust編寫自動化測試實例權威指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Rust語言中的哈希表

    Rust語言中的哈希表

    哈希表也是集合中的一種,也是最常用的集合形式,目前Rust語言核心部分沒有對哈希表進行實現,是使用標準庫提供的,這篇文章主要介紹了Rust語言之哈希表,需要的朋友可以參考下
    2024-02-02

最新評論