[英]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.