将println设为宏有什么好处?
在这段代码中,有一个!后println:
fn main() {
println!("Hello, world!");
}
在我见过的大多数语言中,打印操作是一个函数。为什么它是 Rust 中的宏?
回答
通过成为程序宏,println!()可以获得以下能力:
-
自动引用其参数。例如这是有效的:
let x = "x".to_string(); println!("{}", x); println!("{}", x); // Works even though you might expect `x` to have been moved on the previous line. -
接受任意数量的参数。
-
在编译时验证格式字符串占位符和参数是否匹配。这是 C 的错误的常见来源
printf()。
对于普通的函数或方法,这些都不可能。
也可以看看:
- 是否 println! 借用或拥有变量?
- 如何创建具有可变数量参数的函数?
- 是否可以在纯 Rust 宏中编写像 `print!` 这样复杂的东西?
- Rust 中的宏和函数有什么区别?