gpt4 book ai didi

macros - 匹配下划线而不是宏中的标识

转载 作者:行者123 更新时间:2023-11-29 08:10:15 25 4
gpt4 key购买 nike

我正在创建一个匹配两个表达式和一个标识符的宏。如果不需要标识符,我希望能够忽略它,但如果我在那里使用 _,编译器似乎会提示。

我的宏:

macro_rules! if_some {
($x:expr, $id:ident, $expr:expr) => {
match $x {
None => None,
Some($id) => Some($expr),
}
};
}

我想做什么:

if_some!(obtain_an_option(), x, do_something_with(x))

if_some!(obtain_an_option(), _, do_something())

第二次调用失败。

我通过定义不接收标识符的第二个宏 if_some_! 解决了这个问题(我也无法使用第二个模式)。我确定有一种方法可以说“这里接受一个标识符或只是 _

也许已经有一个宏/函数来处理这个(比如 Option::map 现在我想到了)...不过到现在就好了。

最佳答案

最简单的方法是添加与下划线匹配的第二个臂:

macro_rules! if_some {
($x:expr, _, $expr:expr) => {
match $x {
None => None,
Some(_) => Some($expr),
}
};

($x:expr, $id:ident, $expr:expr) => {
match $x {
None => None,
Some($id) => Some($expr),
}
};
}

而且,是的,这听起来像是您只想要 Option::map

关于macros - 匹配下划线而不是宏中的标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45115433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com