gpt4 book ai didi

macros - tt 元变量类型在 Rust 宏中意味着什么?

转载 作者:行者123 更新时间:2023-11-29 08:20:02 27 4
gpt4 key购买 nike

我正在读一本关于 Rust 的书,并开始玩 Rust macros .除了最后一个 - tt 之外,所有元变量类型都在此处进行了解释并提供了示例。按照书中的说法,它是一棵“单 token 树”。我很好奇,它是什么以及它的用途是什么?能否举个例子?

最佳答案

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

例如,对于下面的程序:

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

token 树将是:

  • fn
  • 主要
  • ()
  • { println!("Hello world!");
    • println
    • !
    • ("Hello world!")
      • “你好,世界!”
    • ;

每个都形成一棵树,其中简单标记(fnmain 等)是叶子,而任何被 ()[]{} 有一个子树。请注意,( 不会单独出现在 token 树中:如果不匹配相应的 ),就不可能匹配 (

例如:

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

将上面的函数与 $name → main, $params → (), $body → { println!("Hello world!") 匹配;

token 树是要求最低的元变量类型:它匹配任何东西。它通常用于具有“不太关心”部分的宏,尤其是具有“头”和“尾”部分的宏。例如,println! 宏有一个分支匹配 ($fmt:expr, $($arg:tt)*) 其中 $fmt是格式字符串,$($arg:tt)* 表示“所有其余”,只是转发给 format_args!。这意味着 println! 不需要知道实际格式并与之进行复杂的匹配。

关于macros - tt 元变量类型在 Rust 宏中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57481590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com