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

Rust模塊關(guān)鍵詞和哈希表詳解

 更新時間:2026年03月10日 15:24:06   作者:Mem0rin  
文章介紹了Rust編程語言中模塊系統(tǒng)、路徑控制、as關(guān)鍵字、外部包的使用以及哈希表的操作,主要涵蓋了如何通過pub關(guān)鍵字控制模塊和結(jié)構(gòu)體的可見性,文章還詳細(xì)講解了哈希表的創(chuàng)建、訪問、所有權(quán)轉(zhuǎn)移、更新操作,感興趣的朋友一起看看吧

模塊

一、pub:公有化

mod front_of_house {
    pub mod hosting {
        //這里的pub是讓這個模塊公有化,也就是說可以通過 crate::front_of_house::hosting::訪問模塊中的元素
        pub fn add_to_waitlist() {}//但是模塊內(nèi)部的元素是否公有化仍然是需要pub關(guān)鍵字指明的,并且我們知道這樣是合理的,因為這樣我們對模塊內(nèi)部的元素哪些需要公開,哪些需要私有有更精準(zhǔn)的把控。
    }
}
pub fn eat_at_restaurant() {
    // 絕對路徑
    crate::front_of_house::hosting::add_to_waitlist();
    // 相對路徑
    front_of_house::hosting::add_to_waitlist();
}

結(jié)構(gòu)體和枚舉的公有化

我們也可以用pub來設(shè)計公有的結(jié)構(gòu)體和枚舉,如果我們在結(jié)構(gòu)體的定義前加入了pub關(guān)鍵詞,那么結(jié)構(gòu)體就是公有的,但是內(nèi)部的字段仍然是私有的,也要通過pub來控制哪些要公有哪些要私有。(比如QQ你可以選擇公開自己的性別生日,但是不會公開身份證號((。

super:從父模塊開始的相對路徑

fn deliver_order() {}
mod back_of_house {
    fn fix_incorrect_order() {
        cook_order();
        super::deliver_order();
    }
    fn cook_order() {}
}

依然是作用域的概念,super關(guān)鍵字把路徑的起點返回到了父模塊的作用域,比如上面的代碼本來在模塊back_of_house的作用域內(nèi),super返回到了crate作用域,從而就可以直接訪問deliver_order()了。

二、as提供新名稱:

use std::fmt::Result;
use std::io::Result as IoResult

三、使用外部包:

1.在Cargo.toml加入對應(yīng)依賴

rand = "0.8.5"

2.用use引入:

use rand::Rng
fn main() {
    let secret_number = rand::thread_rng().gen_range(1..=100);
}

嵌套路徑:

use std::cmp::Ordering;
use std::io;
//等價于
use std::{cmp::Ordering, io};
use std::io;
use std::io::Write;
//等價于
use std::io::{self, Write};

HashMap

相當(dāng)于py的字典,不同的是哈希表也是同質(zhì)的,也就是所有的鍵都得是一個類型,所有的值也得是一個類型。

一、新建哈希map:

use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);

二、訪問哈希map的值:

get

use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
let team_name = String::from("Blue");
let score = scores.get(&team_name).copied().unwrap_or(0);

for循環(huán)遍歷:

use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);
for (key, value) in &scores {
    println!("{key}: {value}");
}

三、所有權(quán):

對于像 i32 這樣的實現(xiàn)了 Copy trait 的類型,其值可以拷貝進(jìn)哈希 map。對于像 String 這樣擁有所有權(quán)的值,其值將被移動而哈希 map 會成為這些值的所有者。

use std::collections::HashMap;
let field_name = String::from("Favorite color");
let field_value = String::from("Blue");
let mut map = HashMap::new();
map.insert(field_name, field_value);
// 這里 field_name 和 field_value 不再有效,
// 嘗試使用它們看看會出現(xiàn)什么編譯錯誤!

因為涉及所有權(quán)的轉(zhuǎn)移,因此在調(diào)用insert之后,field_name, field_value將不能使用。

如果將值的引用插入哈希map中,這些值本身不會移動到哈希map中,但至少要保證但是這些引用指向的值在哈希 map 有效時也是有效的。

四、更新哈希map:

1.覆蓋:對同一個鍵用兩次insert即可

2.只在鍵尚未存在時插入鍵值對:(如果鍵存在不進(jìn)行任何操作,如果不存在則連同值一起插入)

方法是調(diào)用entryAPI,返回值是一個枚舉Entry,代表了可能存在也可能不存在的值。

Entryor_insert方法在鍵對應(yīng)的值存在的時候會返回鍵的可變引用,不存在則把參數(shù)插入。

use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);
scores.entry(String::from("Yellow")).or_insert(50);
scores.entry(String::from("Blue")).or_insert(50);
println!("{scores:?}");

or_insert返回的可變引用可以用于更新舊值,具體如下:

use std::collections::HashMap;
let text = "hello world wonderful world";
let mut map = HashMap::new();
for word in text.split_whitespace() {
    let count = map.entry(word).or_insert(0);
    *count += 1;
}
println!("{map:?}");

到此這篇關(guān)于Rust模塊關(guān)鍵詞和哈希表詳解的文章就介紹到這了,更多相關(guān)Rust模塊關(guān)鍵詞和哈希表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • 詳解Rust中的所有權(quán)機(jī)制

    詳解Rust中的所有權(quán)機(jī)制

    Rust?語言提供了跟其他系統(tǒng)編程語言相同的方式來控制你使用的內(nèi)存,但擁有數(shù)據(jù)所有者在離開作用域后自動清除其數(shù)據(jù)的功能意味著你無須額外編寫和調(diào)試相關(guān)的控制代碼,這篇文章主要介紹了Rust中的所有權(quán)機(jī)制,需要的朋友可以參考下
    2022-10-10
  • 詳解Rust中#[derive]屬性怎么使用

    詳解Rust中#[derive]屬性怎么使用

    在 Rust 中,#[derive] 是一個屬性,用于自動為類型生成常見的實現(xiàn),下面就跟隨小編一起來學(xué)習(xí)一下Rust中derive屬性的具體使用吧
    2024-11-11
  • Rust中字符串與格式化操作方法

    Rust中字符串與格式化操作方法

    Rust提供了多種字符串類型和強(qiáng)大的格式化工具,主要有兩種字符串類型:&str(字符串切片)和String(動態(tài)字符串),二者均基于UTF-8 編碼,本文重點介紹Rust中字符串與格式化的相關(guān)知識,感興趣的朋友一起看看吧
    2025-10-10
  • 解讀Rust的Rc<T>:實現(xiàn)多所有權(quán)的智能指針方式

    解讀Rust的Rc<T>:實現(xiàn)多所有權(quán)的智能指針方式

    Rc<T> 是 Rust 中用于多所有權(quán)的引用計數(shù)類型,通過增加引用計數(shù)來管理共享數(shù)據(jù),只有當(dāng)最后一個引用離開作用域時,數(shù)據(jù)才會被釋放,Rc<T> 適用于單線程環(huán)境,并且只允許不可變共享數(shù)據(jù);需要可變共享時應(yīng)考慮使用 RefCell<T> 或其他解決方案
    2025-02-02
  • Rust的slab庫使用場景分析

    Rust的slab庫使用場景分析

    slab 是一個輕量級、高性能的工具,非常適合管理固定大小的資源集合,尤其是在網(wǎng)絡(luò)編程和事件驅(qū)動架構(gòu)中,這篇文章主要介紹了Rust的slab庫使用教程,需要的朋友可以參考下
    2024-12-12
  • 深入了解Rust中函數(shù)與閉包的使用

    深入了解Rust中函數(shù)與閉包的使用

    本文主要介紹一下Rust函數(shù)相關(guān)的內(nèi)容,首先函數(shù)我們其實一直都在用,所以函數(shù)本身沒什么可說的,我們的重點是與函數(shù)相關(guān)的閉包、高階函數(shù)、發(fā)散函數(shù),感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • rust?中生成與使用protobuf的方法

    rust?中生成與使用protobuf的方法

    這篇文章主要介紹了rust中protobuf生成與使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Rust中vector的詳細(xì)用法

    Rust中vector的詳細(xì)用法

    Rust和C++同樣也有vector概念,本文主要介紹了Rust中vector的詳細(xì)用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Rust?duckdb和polars讀csv文件比較情況

    Rust?duckdb和polars讀csv文件比較情況

    duckdb在數(shù)據(jù)分析上,有非常多不錯的特質(zhì),1、快;2、客戶體驗好,特別是可以同時批量讀csv在一個目錄下的csv等文件,今天來比較下Rust?duckdb和polars讀csv文件比較的情況,感興趣的朋友一起看看吧
    2024-06-06
  • 一文學(xué)會Rust語言如何操作JSON

    一文學(xué)會Rust語言如何操作JSON

    JSON在Web開發(fā)中被廣泛應(yīng)用于數(shù)據(jù)交換,本文主要介紹了Rust語言操作JSON,包括序列化、反序列化、JSON創(chuàng)建等多個方面,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論

朔州市| 贵港市| 中山市| 清苑县| 石家庄市| 新蔡县| 资溪县| 沅陵县| 安远县| 张家港市| 游戏| 那曲县| 龙门县| 普定县| 宕昌县| 东港市| 辽中县| 孙吴县| 嘉祥县| 汉中市| 北安市| 天长市| 东至县| 阜宁县| 丹阳市| 侯马市| 体育| 盐城市| 北宁市| 大荔县| 淅川县| 鄂托克旗| 崇文区| 汝城县| 读书| 马关县| 泗阳县| 阆中市| 万全县| 谢通门县| 清丰县|