将 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 设为宏有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

Scala 中的右关联方法有啥好处?

将 ObjectMapper 声明为 bean 有啥好处?

将引用传递给对象有啥好处? [复制]

将 fetch 包装在 Promise 中有啥好处? [复制]

将 largeHeap 设置为 true 有啥好处?

将方法声明为静态有啥好处