Rust 防锈剂声明

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的两侧产生一个尾随逗号。这样可以正确处理第二个边缘情况。如果没有后面的逗号,它将扩展

在C语言中,您可以同时删除一组类似的变量:

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);
}