标签: macro-rules

使用 Rust 宏生成具有可变参数的函数

我创建了一个 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)

操场

macros rust macro-rules

7
推荐指数
1
解决办法
4723
查看次数

我的 Rust 宏不想接受这个 let 语句

我一直在尝试制作一个功能类似于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 语句,我将不胜感激,对于给您带来的任何不便,我深表歉意。

syntax macros input rust macro-rules

3
推荐指数
1
解决办法
318
查看次数

标签 统计

macro-rules ×2

macros ×2

rust ×2

input ×1

syntax ×1