我创建了一个 Rust 宏,它扩展为函数声明。
macro_rules! build_fn
{
($name:tt) => {
pub fn $name(&self) -> Result<i32, Box<dyn Error>>
{
// <implementation>
Ok(0)
}
};
}
Run Code Online (Sandbox Code Playgroud)
是否可以扩展它以便宏可以采用可变参数?
例如
($name:tt, /*$variable_args ? */) => {
pub fn $name(&self, /*$variable_args ? */) -> Result<i32, Box<dyn Error>>
{
// ...
Ok(0)
}
};
}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试制作一个功能类似于Python输入函数的宏。
而不是每次我想要稍微自动化它时都完全编写标准输入,并结合 println!这样我就可以用一块石头杀死两只鸟。
本质上,如果有人传入一个参数,它会打印一个字符串,然后要求输入,如果他们不这样做,它只会要求从终端输入。
#[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
};
}
Run Code Online (Sandbox Code Playgroud)
我在 let 语句上不断收到错误,只是不知道如何继续,因为我不太了解宏语法。
我发布了整个代码块,因为在第二个匹配表达式上,我试图在没有参数的情况下进行匹配,但我不确定我是否做得正确。
有时错误消息将我带到 github 页面,并且遇到随机错误,所以我只是困惑如何继续进一步
如果有人能帮助我修复 let 语句,我将不胜感激,对于给您带来的任何不便,我深表歉意。