【发布时间】:2017-05-29 22:01:09
【问题描述】:
我正在尝试创建一个宏,该宏生成一个struct,它提供了一组传递给宏的方法。例如,调用:
create_impl!(StructName, fn foo() -> u32 { return 432 })
应该生成一个空结构StructName,它提供方法foo()。
我最初尝试使用 item 宏 arg 类型。但是,当我尝试在规则中使用 item 时,出现以下编译器错误:
error: expected one of `const`, `default`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `fn foo() -> u32 { return 42; }`
--> src/lib.rs:40:13
|
40 | $($function)*
| ^^^^^^^^^
是否可以使用item 参数以这种方式在生成的结构中定义方法?我有什么遗漏吗?
这是我定义的完整宏:
macro_rules! create_impl {
($struct_name:ident, $($function:item),*) => {
struct $struct_name {
}
impl $struct_name {
// This is the part that fails.
$($function)*
}
};
}
【问题讨论】:
-
我认为 methods 根本不是项目。当我将
fn foo()更改为fn foo(self)时,我得到 error: expected one of::or:, found)(如果您在宏之外编写,则会发生同样的错误) .
标签: rust rust-macros