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

Rust用宏實現(xiàn)參數(shù)可變的函數(shù)的實現(xiàn)示例

 更新時間:2024年03月31日 10:12:05   作者:微小冷  
本文主要介紹了Rust用宏實現(xiàn)參數(shù)可變的函數(shù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

聲明式宏

Rust中宏的概念與C/C++中相類似,是編譯期間執(zhí)行的一系列指令。但和C語言相比,Rust中的宏,有著更加復(fù)雜的替換,下面是一個示例

macro_rules! sqr {
    ($x:expr) => {$x * $x}
}

fn main() {
    println!("{}", sqr!(1 + 1));
}
// 運(yùn)行結(jié)果為4

其中,$x的類型是expr,即表達(dá)式。sqr的具體操作,就是把表達(dá)式$x替換為$x * $x。

僅從上面的示例來看,宏似乎同函數(shù)沒什么區(qū)別,或許優(yōu)勢僅體現(xiàn)在編譯期做替換,從而在編譯后可以減少一個函數(shù)指針的開銷。

所以,接下來,不妨用宏實現(xiàn)一個函數(shù)無法實現(xiàn)的功能:輸入多個參數(shù)。

參數(shù)可變的求和函數(shù)

下面用宏實現(xiàn)一個輸入?yún)?shù)可變的函數(shù)sum,功能是求和。

macro_rules! sum {
    ( $( $x:expr ),* ) => {
        {
            let mut n = 0;
            $(n += $x;)*
            n
        }
    };
}

fn main(){
    println!("{}", sum!(1,2,3,4));
}

編譯運(yùn)行的結(jié)果為10,接下來就細(xì)致地探討一下這個宏的替換規(guī)則。

首先,輸入是

( $( $x:expr ),* )

這里星號起到一個重復(fù)匹配的作用,表示左側(cè)的表達(dá)式可以重復(fù)匹配多次。而左側(cè)的表達(dá)式又被分成兩部分,最內(nèi)層的$緊跟著的x是一個表達(dá)式,這個表達(dá)式?jīng)]有任何要求。而這個x與后面的逗號與前面的$符號則形成了外層的匹配模式。

結(jié)合我們的輸入

sum!(1,2,3,4)

摘掉調(diào)用宏時用到的sum!(),其真正被替換的值便是1,2,3,4,而與宏定義中表達(dá)式相匹配的,則可理解為依次是

1 , 2 , 3 , 4 \begin{matrix} 1,\\2,\\3,\\4 \end{matrix} 1,2,3,4?

從而宏的替換內(nèi)容,可以被拆解為

let mut n = 0;
n += 1;
n += 2;
n += 3;
n += 4;
return n

于是,求和的功能就通過宏的方式實現(xiàn)了。

到此這篇關(guān)于Rust用宏實現(xiàn)參數(shù)可變的函數(shù)的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Rust 參數(shù)可變函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Rust中的workspace

    詳解Rust中的workspace

    這篇文章主要向大家介紹Rust中的workspace,主要內(nèi)容包括基礎(chǔ)應(yīng)用、實用技巧、原理機(jī)制等方面,這個概念在Rust中是通用的,只不過maven換成了cargo,而模塊變成了crate,下面跟著小編通過一個例子給大家介紹下
    2022-03-03
  • 深入剖析Rust 中的 Move、Copy 和 Clone

    深入剖析Rust 中的 Move、Copy 和 Clone

    在 Rust 編程語言中,move、Copy 和 Clone 是所有權(quán)系統(tǒng)的核心概念,它們深刻影響著數(shù)據(jù)的傳遞和復(fù)制方式,這些機(jī)制不僅確保了內(nèi)存安全,還提供了高效的性能優(yōu)化手段,本文將深入探討這些概念的內(nèi)部機(jī)制、使用場景、性能影響以及高級用法,感興趣的朋友一起看看吧
    2025-05-05
  • Rust 錯誤處理高級應(yīng)用最佳實踐

    Rust 錯誤處理高級應(yīng)用最佳實踐

    本文介紹了Rust錯誤處理模型,重點(diǎn)講解了Result類型、自定義錯誤、錯誤傳播與轉(zhuǎn)換、錯誤鏈等概念,并以文件操作、網(wǎng)絡(luò)請求、數(shù)據(jù)庫操作為例展示了其實戰(zhàn)應(yīng)用,最后總結(jié)了最佳實踐,通過學(xué)習(xí),可以編寫更加健壯、可維護(hù)的代碼,感興趣的朋友一起看看吧
    2026-04-04
  • 如何使用Rust寫個猜數(shù)字游戲

    如何使用Rust寫個猜數(shù)字游戲

    這篇文章主要介紹了Rust寫個猜數(shù)字游戲,本項目通過動手實踐,介紹了Rust新概念:let、match、函數(shù)、使用外部 crate 等,接下來的文章,你會繼續(xù)深入學(xué)習(xí)這些概念,并且介紹大部分編程語言都有的概念,如變量、數(shù)據(jù)類型和函數(shù),以及如何在 Rust 中使用它們,需要的朋友可以參考下
    2023-12-12
  • MacBook Pro安裝rust編程環(huán)境的過程

    MacBook Pro安裝rust編程環(huán)境的過程

    rustup是一個用于管理Rust版本和工具鏈的工具,這篇文章主要介紹了MacBook Pro安裝rust編程環(huán)境的過程,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Rust中的panic定義及觸發(fā)條件詳解

    Rust中的panic定義及觸發(fā)條件詳解

    這篇文章主要為大家介紹了Rust中的panic定義及觸發(fā)條件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Rust 函數(shù)詳解

    Rust 函數(shù)詳解

    函數(shù)在 Rust 語言中是普遍存在的。Rust 支持多種編程范式,但更偏向于函數(shù)式,函數(shù)在 Rust 中是“一等公民”,函數(shù)可以作為數(shù)據(jù)在程序中進(jìn)行傳遞,對Rust 函數(shù)相關(guān)知識感興趣的朋友一起看看吧
    2021-11-11
  • Rust?duckdb和polars讀csv文件比較情況

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

    duckdb在數(shù)據(jù)分析上,有非常多不錯的特質(zhì),1、快;2、客戶體驗好,特別是可以同時批量讀csv在一個目錄下的csv等文件,今天來比較下Rust?duckdb和polars讀csv文件比較的情況,感興趣的朋友一起看看吧
    2024-06-06
  • rust 自定義迭代器的實現(xiàn)方法

    rust 自定義迭代器的實現(xiàn)方法

    本文介紹了Rust中的迭代器概念、IteratorTrait及其實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • 基于Rust構(gòu)建一個Git提交歷史可視化工具

    基于Rust構(gòu)建一個Git提交歷史可視化工具

    在軟件開發(fā)中,版本控制系統(tǒng)的歷史記錄往往承載著項目的演進(jìn)脈絡(luò),本文主要介紹了如何基于Rust構(gòu)建一個Git提交歷史可視化工具,感興趣的小伙伴可以了解下
    2025-11-11

最新評論

邢台市| 台安县| 文山县| 句容市| 萍乡市| 无锡市| 阿图什市| 虎林市| 龙井市| 年辖:市辖区| 石阡县| 弥渡县| 东乡| 米林县| 深泽县| 崇明县| 榆社县| 柏乡县| 惠东县| 繁昌县| 宁夏| 仲巴县| 迭部县| 昭觉县| 阿城市| 陕西省| 东台市| 晋宁县| 南安市| 宾川县| 佳木斯市| 临潭县| 金乡县| 吉林省| 田阳县| 无极县| 新昌县| 县级市| 乌鲁木齐县| 临颍县| 屏东市|