将 println 设为宏有什么好处?
What benefits are there with making println a macro?
在这段代码中,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()
.
的常见错误来源
None 可以使用简单的函数或方法实现。
另请参阅:
- Is it possible to write something as complex as `print!` in a pure Rust macro?
在这段代码中,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()
.
None 可以使用简单的函数或方法实现。
另请参阅:
- Is it possible to write something as complex as `print!` in a pure Rust macro?