为什么 Rust 要求宏名称末尾有感叹号?

bgo*_*odr 2 rust

为什么 Rust 编程语言的设计者要求宏名称必须以感叹号结尾?

请注意,我并不是说这种设计选择是错误的。我只是好奇。

小智 5

宏不是函数。它们末尾的感叹号让用户知道这是一个宏,因为它们根本不同。宏内部的语法可以是任意的;如果用户不知道这是一个宏,他们会感到困惑

例子:

let list = vec![0; 10];
Run Code Online (Sandbox Code Playgroud)

  • @Bergi 当然,`!` 提示使编写解析器变得更容易,但如果设计中没有这一点,Rust 仍然可以实现它。 (3认同)
  • @Bergi编译器可能不在乎,这对于那些不像编译器那样记住整个符号表的人来说很方便。 (2认同)
  • @tadman这不是关于符号表,而是关于解析器必须处理的宏中的不同语法。当然,该语言可以以不同的方式设计和实现,但是解析错误的错误消息不会那么好。 (2认同)