最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用環(huán)境變量實(shí)現(xiàn)Rust程序中的不區(qū)分大小寫搜索方式

 更新時間:2025年02月26日 09:36:20   作者:Hello.Reader  
本文介紹了如何在Rust中實(shí)現(xiàn)不區(qū)分大小寫的搜索功能,并通過測試驅(qū)動開發(fā)(TDD)方法逐步實(shí)現(xiàn)該功能,通過修改運(yùn)行函數(shù)和獲取環(huán)境變量,程序可以根據(jù)環(huán)境變量控制搜索模式

步驟 1:編寫失敗的測試

我們遵循測試驅(qū)動開發(fā)(TDD)方法,首先編寫一個測試來驗(yàn)證不區(qū)分大小寫搜索功能。由于我們尚未實(shí)現(xiàn)該功能,因此這個測試會失敗。

以下是測試代碼:

#[cfg(test)]
mod tests {
    use super::*;

    // 測試:區(qū)分大小寫的搜索
    #[test]
    fn case_sensitive() {
        let query = "duct";
        let contents = "\
Rust:
safe, fast, productive.
Pick three.
Duct tape.";

        // 期望返回大小寫敏感的匹配結(jié)果
        assert_eq!(vec!["safe, fast, productive."], search(query, contents));
    }

    // 測試:不區(qū)分大小寫的搜索
    #[test]
    fn case_insensitive() {
        let query = "rUsT";  // 查詢字符串的大小寫不一致
        let contents = "\
Rust:
safe, fast, productive.
Pick three.
Trust me.";

        // 期望返回不區(qū)分大小寫的匹配結(jié)果
        assert_eq!(
            vec!["Rust:", "Trust me."],
            search_case_insensitive(query, contents)
        );
    }
}

在上述代碼中:

  • case_sensitive 測試驗(yàn)證了原始的區(qū)分大小寫的搜索。
  • case_insensitive 測試驗(yàn)證了我們將在后面實(shí)現(xiàn)的不區(qū)分大小寫的搜索。此時,由于我們還沒有實(shí)現(xiàn) search_case_insensitive 函數(shù),編譯將失敗。

步驟 2:實(shí)現(xiàn) search_case_insensitive 函數(shù)

為了實(shí)現(xiàn)不區(qū)分大小寫的搜索,我們需要修改 search 函數(shù),使其能夠忽略大小寫。

以下是 search_case_insensitive 函數(shù)的實(shí)現(xiàn):

// 不區(qū)分大小寫的搜索函數(shù)
pub fn search_case_insensitive<'a>(
    query: &str,       // 查詢字符串
    contents: &'a str, // 文件內(nèi)容
) -> Vec<&'a str> {
    let query = query.to_lowercase(); // 將查詢字符串轉(zhuǎn)換為小寫
    let mut results = Vec::new(); // 存儲匹配結(jié)果

    // 遍歷文件中的每一行
    for line in contents.lines() {
        // 將每一行轉(zhuǎn)換為小寫再進(jìn)行比較
        if line.to_lowercase().contains(&query) {
            results.push(line); // 如果匹配,加入結(jié)果列表
        }
    }

    results // 返回匹配的行
}

代碼解釋:

  • query.to_lowercase() 將查詢字符串轉(zhuǎn)換為小寫,以確保不區(qū)分大小寫地進(jìn)行匹配。
  • line.to_lowercase() 將每一行內(nèi)容轉(zhuǎn)換為小寫,并檢查是否包含查詢字符串。

步驟 3:修改 run 函數(shù)

run 函數(shù)是程序的核心,它負(fù)責(zé)執(zhí)行搜索并輸出結(jié)果。我們需要修改 run 函數(shù),使其根據(jù) Config 結(jié)構(gòu)體中的 ignore_case 字段來決定是使用區(qū)分大小寫的 search 函數(shù),還是不區(qū)分大小寫的 search_case_insensitive 函數(shù)。

// 根據(jù)配置運(yùn)行搜索
pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
    let contents = fs::read_to_string(config.file_path)?; // 讀取文件內(nèi)容

    // 根據(jù) ignore_case 字段決定使用哪種搜索
    let results = if config.ignore_case {
        search_case_insensitive(&config.query, &contents) // 不區(qū)分大小寫的搜索
    } else {
        search(&config.query, &contents) // 區(qū)分大小寫的搜索
    };

    // 打印匹配的行
    for line in results {
        println!("{line}");
    }

    Ok(())
}

代碼解釋:

  • Config 結(jié)構(gòu)體包含一個 ignore_case 字段,用于控制是否啟用不區(qū)分大小寫的搜索。
  • 根據(jù) ignore_case 的值,我們決定調(diào)用 search 還是 search_case_insensitive

步驟 4:獲取環(huán)境變量

現(xiàn)在,我們需要從環(huán)境變量中獲取 IGNORE_CASE 的值,來決定是否啟用不區(qū)分大小寫的搜索。

我們使用 Rust 標(biāo)準(zhǔn)庫中的 env 模塊來訪問環(huán)境變量。

use std::env;

impl Config {
    // 構(gòu)建 Config 實(shí)例
    pub fn build(args: &[String]) -> Result<Config, &'static str> {
        if args.len() < 3 {
            return Err("not enough arguments");
        }

        let query = args[1].clone();
        let file_path = args[2].clone();

        // 檢查環(huán)境變量 IGNORE_CASE 是否設(shè)置
        let ignore_case = env::var("IGNORE_CASE").is_ok(); // 如果環(huán)境變量存在,則啟用不區(qū)分大小寫的搜索

        Ok(Config {
            query,
            file_path,
            ignore_case,
        })
    }
}

代碼解釋:

  • 我們使用 env::var("IGNORE_CASE").is_ok() 來檢查環(huán)境變量 IGNORE_CASE 是否被設(shè)置。
  • 如果設(shè)置了該環(huán)境變量,我們將 ignore_case 設(shè)置為 true,否則默認(rèn)為 false。

步驟 5:運(yùn)行程序

現(xiàn)在,我們的程序已經(jīng)支持根據(jù)環(huán)境變量來控制搜索模式。你可以通過以下命令來運(yùn)行程序:

  1. 不使用環(huán)境變量,執(zhí)行區(qū)分大小寫的搜索:
$ cargo run -- to poem.txt
  1. 設(shè)置環(huán)境變量 IGNORE_CASE=1,啟用不區(qū)分大小寫的搜索:
$ IGNORE_CASE=1 cargo run -- to poem.txt

對于 PowerShell 用戶,可以使用以下命令:

PS> $Env:IGNORE_CASE=1; cargo run -- to poem.txt

總結(jié)

通過使用環(huán)境變量,我們成功地在Rust程序中實(shí)現(xiàn)了不區(qū)分大小寫的搜索功能。

這種方式讓用戶可以通過簡單的環(huán)境變量配置來改變程序的行為,而不需要每次運(yùn)行程序時都指定命令行參數(shù)。

通過這種方法,我們可以在命令行工具中靈活地控制不同的搜索模式,使程序更加友好和易于配置。

在本教程中,我們:

  • 通過 TDD 編寫了失敗的測試,并逐步實(shí)現(xiàn)了功能。
  • 學(xué)會了如何使用 Rust 標(biāo)準(zhǔn)庫中的 env 模塊獲取環(huán)境變量。
  • 通過環(huán)境變量控制程序行為,讓命令行工具更加靈活。

通過這個示例,希望你對 Rust 中如何使用環(huán)境變量有所了解,并能夠在自己的項(xiàng)目中靈活應(yīng)用。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Rust常用特型之ToOwned特型示例詳解

    Rust常用特型之ToOwned特型示例詳解

    在Rust中,假定某類型實(shí)現(xiàn)了Clone特型,如果給你一個對它引用,那我們得到它指向內(nèi)容的備份的最常見方式是調(diào)用其clone()函數(shù),這篇文章主要介紹了Rust常用特型之ToOwned特型,需要的朋友可以參考下
    2024-04-04
  • Windows下Rust自定義路徑安裝全攻略【保姆級教程】

    Windows下Rust自定義路徑安裝全攻略【保姆級教程】

    Rust被設(shè)計為能夠處理大量的并發(fā)和高性能的軟件,這使得它適合在游戲開發(fā)、操作系統(tǒng)開發(fā)、瀏覽器引擎開發(fā)以及嵌入式系統(tǒng)等領(lǐng)域發(fā)揮巨大的作用,這篇文章主要介紹了Windows下Rust自定義路徑安裝的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • 在Rust中要用Struct和Enum組織數(shù)據(jù)的原因解析

    在Rust中要用Struct和Enum組織數(shù)據(jù)的原因解析

    在Rust中,Struct和Enum是組織數(shù)據(jù)的核心工具,Struct用于將相關(guān)字段封裝為單一實(shí)體,便于管理和擴(kuò)展,Enum用于明確定義所有可能的狀態(tài),本文將通過具體示例,深入探討為什么在Rust中必須使用struct和enum來管理數(shù)據(jù),感興趣的朋友一起學(xué)習(xí)吧
    2025-02-02
  • rust中的match表達(dá)式使用詳解

    rust中的match表達(dá)式使用詳解

    在rust中提供了一個極為強(qiáng)大的控制流運(yùn)算符match,這篇文章主要介紹了rust中的match表達(dá)式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Rust?Atomics?and?Locks?源碼解讀

    Rust?Atomics?and?Locks?源碼解讀

    這篇文章主要為大家介紹了Rust?Atomics?and?Locks?源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Rust突破編譯器限制構(gòu)造可修改的全局變量

    Rust突破編譯器限制構(gòu)造可修改的全局變量

    這篇文章主要為大家介紹了Rust突破編譯器限制構(gòu)造可修改的全局變量示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 深入了解Rust中泛型的使用

    深入了解Rust中泛型的使用

    所有的編程語言都致力于將重復(fù)的任務(wù)簡單化,并為此提供各種各樣的工具。在?Rust?中,泛型(generics)就是這樣一種工具,本文就來聊聊Rust中泛型的使用,需要的可以參考一下
    2022-11-11
  • Rust搭建webserver的底層原理與應(yīng)用實(shí)戰(zhàn)技巧

    Rust搭建webserver的底層原理與應(yīng)用實(shí)戰(zhàn)技巧

    本文介紹Rust在HTTP編程中的應(yīng)用,涵蓋協(xié)議基礎(chǔ)、標(biāo)準(zhǔn)庫與第三方庫(如hyper、reqwest)的使用,以及多線程服務(wù)器和線程池的實(shí)現(xiàn)與關(guān)閉機(jī)制,展示Rust在性能、安全和并發(fā)方面的優(yōu)勢,感興趣的朋友跟隨小編一起看看吧
    2025-06-06
  • Rust字符串字面值的一些經(jīng)驗(yàn)總結(jié)

    Rust字符串字面值的一些經(jīng)驗(yàn)總結(jié)

    字符串有兩種表現(xiàn)形式,一種是基本類型,表示字符串的切片,以&str表示,另一種是可變的string類型,下面這篇文章主要給大家介紹了關(guān)于Rust字符串字面值的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Rust初體驗(yàn):手把手教你構(gòu)建‘Hello,?World!’

    Rust初體驗(yàn):手把手教你構(gòu)建‘Hello,?World!’

    "準(zhǔn)備好了嗎?一起踏上Rust編程語言的精彩旅程!在這篇「Rust初體驗(yàn)」中,我們將手把手教你構(gòu)建經(jīng)典程序“Hello,?World!”,感受Rust的強(qiáng)大與安全,短短幾行代碼,就能讓你對這個系統(tǒng)級語言的魅力一探究竟!快加入吧,驚喜等你發(fā)現(xiàn)!"
    2024-01-01

最新評論

兴隆县| 黄大仙区| 商河县| 苏州市| 榆社县| 应城市| 齐河县| 慈溪市| 岳西县| 建平县| 商南县| 托克逊县| 寿阳县| 遂溪县| 邮箱| 龙江县| 应城市| 伊宁市| 简阳市| 林州市| 万源市| 双城市| 通山县| 大埔县| 布尔津县| 多伦县| 静安区| 陆良县| 汤原县| 西昌市| 阿合奇县| 木里| 铁岭县| 乡宁县| 河西区| 阜南县| 教育| 奎屯市| 衡东县| 姜堰市| 温泉县|