在C语言中,你可以一次识别一堆类似的变量:
int a=1, b=2, c=3;
你怎么会生锈?我可以这样做:
let (mut a, mut b, mut c) = (1i, 2i, 3i);
但这需要多次说明mut
和i
。有没有更短的方法来做到这一点?
答案 0 :(得分:5)
没有更短的方法可以做到这一点。
嗯,那不是真的。您可以定义a macro:
#![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);
}
那些眼睛敏锐的人会注意到逗号在宏扩展的RHS中略微奇怪地放置,因为它会在let
的两边产生一个尾随逗号。这允许正确处理第二边缘壳。如果没有尾随逗号,则会扩展为let (mut _x) = (2u);
,但parens like that are not (yet) allowed in patterns;使用尾随逗号将其扩展为let (mut _x,) = (2u,);
,这是1元组,因此模式匹配正常。