我正在创建一个匹配两个表达式和一个标识符的宏。如果不需要标识符,我希望能够忽略它,但如果我_
在那里使用,编译器似乎会抱怨。
我的宏:
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
现在我想的那样)......不过现在会很好。