Macros 是否可以在具有单个实例的Rust宏中多次使用参数?
是否可以在Rust宏中多次使用参数,只实例化一次参数 举个简单的例子:Macros 是否可以在具有单个实例的Rust宏中多次使用参数?,macros,rust,Macros,Rust,是否可以在Rust宏中多次使用参数,只实例化一次参数 举个简单的例子: macro_rules! squared { ($x:expr) => { $x * $x } } 当这起作用时,如果像squared这样调用!(some_function()+1),该函数将被多次调用。有没有办法避免这种情况 非工作示例: macro_rules! squared { ($x:expr) => { let y = $x;
macro_rules! squared {
($x:expr) => {
$x * $x
}
}
当这起作用时,如果像squared这样调用!(some_function()+1)
,该函数将被多次调用。有没有办法避免这种情况
非工作示例:
macro_rules! squared {
($x:expr) => {
let y = $x;
y * y
}
}
给出一个编译错误:
error: expected expression, found statement (`let`)
是的,只是缺少一组额外的大括号来包含表达式
macro_rules! squared {
($x:expr) => {{
let y = $x;
y * y
}}
}
请注意,此宏仅适用于具有实现
Copy
类型的表达式。您能否回答问题以解释示例“不工作”的原因。注意到问题中的错误。您是否单击了显示第二个宏及其工作原理的“我的第二个链接”?你能回答你的问题来说明你是如何调用第二个宏的,以至于它失败的吗?也许你甚至可以完全复制错误?在询问堆栈溢出问题时,100%希望您创建一个。