将 println 设为宏有啥好处?
Posted
技术标签:
【中文标题】将 println 设为宏有啥好处?【英文标题】:What benefits are there with making println a macro?将 println 设为宏有什么好处? 【发布时间】:2021-08-03 04:05:57 【问题描述】:在这段代码中,println
后面有一个!
:
fn main()
println!("Hello, world!");
在我见过的大多数语言中,打印操作都是一个函数。为什么它是 Rust 中的宏?
【问题讨论】:
【参考方案1】:作为一个程序宏,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()
的常见错误来源。
这些都不可能使用普通的函数或方法。
另见:
Does println! borrow or own the variable? How can I create a function with a variable number of arguments? Is it possible to write something as complex as `print!` in a pure Rust macro? What is the difference between macros and functions in Rust?【讨论】:
以上是关于将 println 设为宏有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章