Rust 防锈剂声明
在C语言中,您可以同时删除一组类似的变量:Rust 防锈剂声明,rust,Rust,在C语言中,您可以同时删除一组类似的变量: int a=1, b=2, c=3; 在生锈的情况下你会怎么做?我可以这样做: let (mut a, mut b, mut c) = (1i, 2i, 3i); 但这需要多次声明mut和i。有没有较短的方法可以做到这一点?没有较短的方法可以做到这一点 嗯,那不完全是真的。您可以定义: 那些目光敏锐的人会注意到逗号在宏展开的RHS中的位置有点奇怪,因为它会在let的两侧产生一个尾随逗号。这样可以正确处理第二个边缘情况。如果没有后面的逗号,它将扩展
int a=1, b=2, c=3;
在生锈的情况下你会怎么做?我可以这样做:
let (mut a, mut b, mut c) = (1i, 2i, 3i);
但这需要多次声明
mut
和i
。有没有较短的方法可以做到这一点?没有较短的方法可以做到这一点
嗯,那不完全是真的。您可以定义:
那些目光敏锐的人会注意到逗号在宏展开的RHS中的位置有点奇怪,因为它会在
let
的两侧产生一个尾随逗号。这样可以正确处理第二个边缘情况。如果没有后面的逗号,它将扩展为let(mut\ux)=(2u)代码>,但是;使用尾随逗号,它扩展为let(mut_x,)=(2u,)代码>,它们是1元组,因此模式匹配很好。没有比这更短的方法
嗯,那不完全是真的。您可以定义:
那些目光敏锐的人会注意到逗号在宏展开的RHS中的位置有点奇怪,因为它会在let
的两侧产生一个尾随逗号。这样可以正确处理第二个边缘情况。如果没有后面的逗号,它将扩展为let(mut\ux)=(2u)代码>,但是;使用尾随逗号,它扩展为let(mut_x,)=(2u,)代码>,它们是1元组,因此模式匹配很好。编写让mut a=1i看起来总是更好代码>让mut b=2i代码>让mut c=3i代码>。编写让mut a=1i看起来总是更好代码>让mut b=2i代码>让mut c=3i代码>。
#![feature(macro_rules)]
macro_rules! multi_mut_let {
( $( $id: ident = $value: expr ),* ) => {
let ( $( mut $id, )* ) = ($( $value, )*);
}
}
fn main() {
multi_mut_let!(a = 1i, b = 2u, c = 3f64);
a += 1;
b *= 2;
c -= 3.0;
println!("{} {} {}", a, b, c); // 2 4 0
// edge cases (which are handled fine):
multi_mut_let!();
multi_mut_let!(_x = 2u);
}