簡體   English   中英

我的 rust 宏不想接受這個 let 語句

[英]My rust macro doesn't want to accept this let statement

我一直在嘗試制作一個功能類似於 Python 的輸入 function 的宏。

而不是每次我想稍微自動化它並結合 println 時都完全編寫標准輸入。 所以我可以用一塊石頭殺死 2 只鳥。

本質上,如果有人傳入一個參數,它會打印一個字符串然后要求輸入,如果他們不這樣做,它只會要求從終端輸入。

#[macro_export]
macro_rules! input {
    ($a:expr) => {
        println!("{}", $a);
        let mut input = String::new();
        std::io::stdin().read_line(&mut input).unwrap();

        return $input
    };

    (_) => {
        let mut input = String::new();
        std::io::stdin().read_line(&mut $input).unwrap();

        return $input
    };
}

我一直在 let 語句中遇到錯誤,只是不知道如何繼續,因為我不太了解宏語法。

我在第二個匹配表達式上發布了整個代碼塊,因為當沒有 arguments 時,我試圖匹配它,但我不確定我是否做對了。

有時錯誤消息將我帶到 github 頁,我遇到了隨機錯誤,所以我只是很困惑如何繼續 furhter

如果有人可以幫助我修復 let 語句,我將不勝感激,對於任何不便,我深表歉意。

#[macro_export]
macro_rules! input {
    ($a:expr) => {{
        println!("{}", $a);
        let mut input = String::new();
        std::io::stdin().read_line(&mut input).unwrap();
        input
    }};

    (_) => {{
        let mut input = String::new();
        std::io::stdin().read_line(&mut $input).unwrap();

        input
    }};
}

fn main() {
    let foo = input!("Blargh");
}

你需要額外的花括號。 第一對是包含宏應該擴展到的內容。 第二對是因為宏應該擴展為代碼塊

然后我們擺脫return因為宏不是 function。相反,它只是擴展為一些代碼,代碼塊的值只是最后一個表達式(沒有; )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM