欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

rust標(biāo)準(zhǔn)庫(kù)std::env環(huán)境相關(guān)的常量

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

rust標(biāo)準(zhǔn)庫(kù)std::env環(huán)境相關(guān)的常量

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

env 常量

std::env下面一些系統(tǒng)相關(guān)的常量:

ARCH	
DLL_EXTENSION
DLL_PREFIX	
DLL_SUFFIX	
EXE_EXTENSION
EXE_SUFFIX	
FAMILY
OS

我們?cè)趗buntu下將這些常量打印出來看一下:

    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);
// 顯示結(jié)果:
ARCH = x86_64
DLL_EXTENSION = so
DLL_PREFIX = lib
DLL_SUFFIX = .so
EXE_EXTENSION = 
EXE_SUFFIX = 
FAMILY = unix
OS = linux

常用函數(shù) 

std::env模塊下有如下函數(shù):

args	返回命令行傳遞的參數(shù)
args_os	返回當(dāng)前進(jìn)程的參數(shù)
current_dir	返回當(dāng)前的工作目錄,該目錄保存在PathBuf中
current_exe	返回當(dāng)前可執(zhí)行程序的全路徑
home_dir	返回當(dāng)前用戶目錄的路徑
join_paths	添加一些環(huán)境變量到PATH這個(gè)變量中
remove_var	刪除當(dāng)前運(yùn)行進(jìn)程的環(huán)境變量(系統(tǒng)中的環(huán)境變量不會(huì)改變,只改變當(dāng)前進(jìn)程的環(huán)境變量)
set_current_dir	指定當(dāng)前可執(zhí)行程序的工作目錄
set_var	將當(dāng)前進(jìn)程的環(huán)境變量修改為新的值
split_paths	Parses input according to platform conventions for the PATH environment variable.
temp_dir	返回臨時(shí)文件所存放的目錄
var	從當(dāng)前進(jìn)程獲取環(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.

補(bǔ)充:

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

1.摘要

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

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è)集合, 先看一段示例代碼:

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

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

現(xiàn)在將這段代碼編譯執(zhí)行會(huì)發(fā)現(xiàn)沒有任何內(nèi)容輸出, 這是因?yàn)閳?zhí)行運(yùn)行沒有參數(shù)信息, 現(xiàn)在我們?cè)O(shè)計(jì)一個(gè)場(chǎng)景, 通過search參數(shù)來搜索一個(gè)文件, 完整命令如下:

cargo run -- search filename.txt

注意: 參數(shù)符號(hào)"--"與參數(shù)名之間有空格。

執(zhí)行結(jié)果如下:

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

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

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

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ù)組索引來取變量名稱, 例如: args[0]對(duì)應(yīng)是集合中的第一個(gè)元素, 也就是二進(jìn)制程序名, 這個(gè)不是我們需要的, 如果要取參數(shù)search的內(nèi)容, 使用args[1], 取文件名使用args[2], 以此類推。

執(zhí)行結(jié)果如下:

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

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

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

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)行打印:

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

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

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

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

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

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

此時(shí)將走另一個(gè)流程, 利用Err()宏打印錯(cuò)誤信息。

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

5.總結(jié)

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

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

相關(guān)文章

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

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

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

    Rust Struct結(jié)構(gòu)體詳解

    結(jié)構(gòu)體,是一種自定義數(shù)據(jù)類型,允許程序員將不同類型的數(shù)據(jù)結(jié)合起來,形成相關(guān)聯(lián)的整體。Rust的結(jié)構(gòu)體還提供方法和關(guān)聯(lián)函數(shù),可以指定那些與結(jié)構(gòu)體數(shù)據(jù)相關(guān)的行為
    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 插件的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-03-03
  • 深入了解Rust的切片使用

    深入了解Rust的切片使用

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

    關(guān)于使用rust調(diào)用c++靜態(tài)庫(kù)并編譯nodejs包的問題

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

    Rust應(yīng)用調(diào)用C語言動(dòng)態(tài)庫(kù)的操作方法

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

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

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

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

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

    Rust編寫自動(dòng)化測(cè)試實(shí)例權(quán)威指南

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

    Rust語言中的哈希表

    哈希表也是集合中的一種,也是最常用的集合形式,目前Rust語言核心部分沒有對(duì)哈希表進(jìn)行實(shí)現(xiàn),是使用標(biāo)準(zhǔn)庫(kù)提供的,這篇文章主要介紹了Rust語言之哈希表,需要的朋友可以參考下
    2024-02-02

最新評(píng)論