本教程详细解释了Rust中函数与函数式宏的区别,并通过代码示例展示了如何使用Rust的函数式宏来处理不同数量的参数。
本教程解释了函数与函数式宏之间的区别。例如,为什么
msg!
后面有一个感叹号?本教程将解释这种语法。作为一种强类型语言,Rust 不能接受函数的任意数量的参数。例如,Python 的 print
函数可以接受任意数量的参数:
print(1)
print(1, 2)
print(1, 2, 3)
!
表示“函数”是一个函数式宏。Rust 的函数式宏通过 !
符号来标识,例如 Solana 中的 println!(...)
或 msg!(...)
。在 Rust 中,打印内容的常规函数(非函数式宏)是 std::io::stdout().write
,它只接受一个字节字符串作为参数。如果你想运行以下代码,如果你不想设置开发环境,Rust Playground 是一个方便的工具。我们使用以下示例(取自这里):
use std::io::Write;
fn main() {
std::io::stdout().write(b"Hello, world!
").unwrap();
}
请注意,write
是一个函数,而不是宏,因为它没有 !
。如果你尝试像上面在 Python 中那样做,代码将无法编译,因为 write
只接受一个参数:
// 这段代码无法编译
use std::io::Write;
fn main() {
std::io::stdout().write(b"1
").unwrap();
std::io::stdout().write(b"1", b"2
").unwrap();
std::io::stdout().write(b"1", b"2", b"3
").unwrap();
}
因此,如果你想打印任意数量的参数,**你需要为每种参数数量编写...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!