如何在Rust中执行就地作业? 在C++中,我可以在将变量打印为“屏幕”:时,在变量赋值>代码> var >代码中执行适当的赋值。 int-var=5; std::cout
Rust中的赋值运算符不计算赋值;它们的计算结果为如何在Rust中执行就地作业? 在C++中,我可以在将变量打印为“屏幕”:时,在变量赋值>代码> var >代码中执行适当的赋值。 int-var=5; std::cout,rust,Rust,Rust中的赋值运算符不计算赋值;它们的计算结果为()。因此,您需要在赋值后读取变量以获得新值。可以对块执行此操作,因为块也是表达式 let mut counter = 0; println!("{}", { counter += 1; counter }); 如果你要经常这样做,请考虑定义宏: macro_rules! inc { ($e:expr) => { { $e += 1; $e } } } let mut counter = 0; print
()
。因此,您需要在赋值后读取变量以获得新值。可以对块执行此操作,因为块也是表达式
let mut counter = 0;
println!("{}", { counter += 1; counter });
如果你要经常这样做,请考虑定义宏:
macro_rules! inc {
($e:expr) => {
{ $e += 1; $e }
}
}
let mut counter = 0;
println!("{}", inc!(counter));
最短的解决方案是返回以下值:
let mut counter = 0;
println!("{}", {counter += 1; counter});
但老实说,我想说这不是惯用的锈迹,你不妨把它写在另一行:
let mut counter = 0;
counter += 1;
println!("{}", counter);
较长的答案是您无法获得赋值的值。的特征定义为
pub trait AddAssign<Rhs = Self> {
fn add_assign(&mut self, Rhs);
}
可以通过返回引用来修复:
println!("{}", {string += "a"; &string});
但在这一点上,没有什么真正的“储蓄”要做
let mut string = String::new();
println!("{}", {string += "a"; string});
println!("{}", string); // use of moved value: `string`
println!("{}", {string += "a"; &string});