Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 宏中的标记树(处理参数列表)_Macros_Rust - Fatal编程技术网

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;)+
                                                    ^~~~