Macros 宏中的标记树(处理参数列表)
目前,将扩展方法添加到另一个模块中的类型(即使该模块位于子模块中)的唯一方法是定义一个新特性并为该类型实现它。但是,由于方法的数量越来越多,这是非常笨拙的:Macros 宏中的标记树(处理参数列表),macros,rust,Macros,Rust,目前,将扩展方法添加到另一个模块中的类型(即使该模块位于子模块中)的唯一方法是定义一个新特性并为该类型实现它。但是,由于方法的数量越来越多,这是非常笨拙的: trait Ops { fn parse_list_item(&self, current_item: ListItemInfo) -> ParseResult<(Document, ListItemInfo)>; fn parse_list_item_content(&s
trait Ops {
fn parse_list_item(&self, current_item: ListItemInfo)
-> ParseResult<(Document, ListItemInfo)>;
fn parse_list_item_content(&self) -> ParseResult<Document>;
}
impl<'a> Ops for MarkdownParser<'a> {
fn parse_list_item(&self, current_item: ListItemInfo)
-> ParseResult<(Document, ListItemInfo)> {
// ...
}
fn parse_list_item_content(&self) -> ParseResult<Document> {
// ...
}
}
它失败了,发出了一个相当恶劣的信息:
/tmp/rs/ops/src/main.rs:8:27: 8:31 error: expected type, found token INTERPOLATED(NtTT(ptr::P<ast::TokenTree>{ptr: box TTTok(codemap::Span{lo: codemap::BytePos(337u32), hi: codemap::BytePos(338u32), expn_id: codemap::ExpnId(4294967295u32)}, BINOP(AND))}))
/tmp/rs/ops/src/main.rs:8 $(fn $name($($args)*) -> $ret;)+
^~~~
/tmp/rs/ops/src/main.rs:8:27:8:31错误:预期类型,已找到内插令牌(NtTT(ptr::P),但是,我希望有类似的解决方法
有什么建议吗?首先,它必须是$($args:tt),*
,比如。不知道为什么&self
与tt
though@Manishearth,我拿了$($args:tt)*
来自格式化宏。即使它有逗号分隔的参数,它仍然有一个没有逗号的模式。你解决了这个问题吗?似乎tt
无法捕获这个。我找不到“令牌树”的定义。
/tmp/rs/ops/src/main.rs:8:27: 8:31 error: expected type, found token INTERPOLATED(NtTT(ptr::P<ast::TokenTree>{ptr: box TTTok(codemap::Span{lo: codemap::BytePos(337u32), hi: codemap::BytePos(338u32), expn_id: codemap::ExpnId(4294967295u32)}, BINOP(AND))}))
/tmp/rs/ops/src/main.rs:8 $(fn $name($($args)*) -> $ret;)+
^~~~