在 python 中,我可以在=格式化参数后包含一个来打印变量的值以及变量名称:
var = 10
f"{var=}" # -> "var=10"
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Rust 中使用format!()宏来做到这一点?我知道 dbg!宏,但该字符串将显示进度条和 dbg!不返回字符串。
我想要类似format!("{var:=}")或也许的东西format!("{var=}"),但这些都不起作用。
澄清一下,我不想输入变量名称,但仍将其打印出来。例如,如果我打印一长行变量,例如:
println!("variable1={variable1}, variable2={variable2}, variable3={variable3}, variable4={variable4}");
Run Code Online (Sandbox Code Playgroud)
显式写出变量名称很快就会过时,如果我重命名该变量,那么 rust-analyzer 不会拾取该字符串,并且会给我留下类似"old_name={new_name}".
这是一件小事,但我发现f"{var1=}"在 python 中非常有用。
std我认为宏本身不存在类似的东西format!。dbg!如果您只需要类似于 a的输出String,您可以为此编写一个简单的宏:
macro_rules! my_format {
($val:expr $(,)?) => {
format!("{} = {:#?}", stringify!($val), $val)
}
}
fn main() {
let value = 42;
let s = my_format!(value);
println!("{s}"); // prints out "value = 42"
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以在没有宏的情况下仅使用函数来完成此操作。如果您想将它用作较长字符串的一部分,则必须求助于format!("My value: {}", my_format!(value));。