T raff:tt元变量类型在Rust宏中意味着什么

我正在阅读一本关于 Rust 的书,并开始玩Rust macros。所有元变量类型都在那里解释并有示例,除了最后一个-tt。根据这本书,它是一个“单令牌树”。我很好奇,它是什么,它用于什么?你能提供一个例子吗?

52

这是为了确保宏调用中的任何内容正确匹配()[]{}对而引入的概念。tt将匹配任何单个标记任何一对括号 / 括号 / 大括号及其内容

例如,对于以下程序:

fn main() {
    println!("Hello world!");
}

令牌树将是:

fn main () { println!("Hello world!");} println ! ("Hello world!") "Hello world!" ;

每个都形成一个树,其中简单的令牌(fnmain等)是叶子,并且由()[]{}。请注意,(不会单独出现在令牌树中:如果没有匹配,则无法匹配(

例如:

macro_rules! {
    (fn $name:ident $params:tt $body:tt) => { /* … */ }
}

将上述函数与$name → main$params → ()$body → { println!("Hello world!"); }匹配。

令牌树是要求最低的元变量类型:它匹配任何东西。它经常用在有“不真正关心”部分的宏中,尤其是在有“头”和“尾”部分的宏中。例如,println!宏的实际分支与($fmt:expr, $($arg:tt)*)匹配,其中$fmt的所有“格式字符串,$($arg:tt)*

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(322)
Ciartuar皮带:Webots-将animatedGeometry添加到我的跟踪机器人中为包含车轮的皮带提供了奇怪的形状
上一篇
不属于python标准库:“列不属于引用表”为什么(select the word that doesn't belong.)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(73条)