gpt4 book ai didi

Rust 复合声明

转载 作者:行者123 更新时间:2023-11-29 08:11:51 25 4
gpt4 key购买 nike

在 C 中,您可以一次删除一堆类似的变量:

int a=1, b=2, c=3;

在 Rust 中你会怎么做?我可以做类似的事情:

let (mut a, mut b, mut c) = (1i, 2i, 3i);

但这需要多次声明muti。有更短的方法吗?

最佳答案

没有比这更短的方法了。


嗯,事实并非如此。你可以定义 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 元组,因此模式匹配很好。

关于Rust 复合声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24585349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com