为Rust中的一行中的多个变量分配单个值?

ide*_*n42 3 syntactic-sugar rust

分配多个变量的常用方法通常在编程语言(如C或Python)中表示为:

a = b = c = value;
Run Code Online (Sandbox Code Playgroud)

在Rust中是否有相同的功能,或者你需要写出来吗?

a = value;
b = value;
c = value;
Run Code Online (Sandbox Code Playgroud)

如果这是显而易见的道歉,但我的所有搜索都会导致有关元组分配的问答.

Mil*_*les 17

您不能将分配的结果链接在一起。但是,您可以使用单个语句分配多个变量。

let语句中,您可以通过在赋值左侧使用无可辩驳的模式来绑定多个名称:

let (a, b) = (1, 2);
Run Code Online (Sandbox Code Playgroud)

从 Rust 1.59 开始,您还可以在任何赋值的左侧有多个值,而不仅仅是let语句。)

为了将相同的值分配给多个变量而不重复该值,可以使用切片模式作为赋值的左侧,并在右侧使用数组表达式来重复该值(如果它实现了 Copy):

let value = 42;
let [a, b, c] = [value; 3]; // or: let [mut a, mut b, mut c] = ...
println!("{} {} {}", a, b, c); // prints: 42 42 42
Run Code Online (Sandbox Code Playgroud)

游乐场


DK.*_*DK. 8

不,没有相应的.是的,您必须编写多个分配,或编写一个本身执行多个分配的宏.

  • 这一决定背后的部分理由是所有权; `a = b = c = Vec :: new()`的结果是什么? (5认同)

Dre*_*acy 5

事实上,你完全可以做到这一点!

let a @ b @ c = value;
Run Code Online (Sandbox Code Playgroud)

这使用了@模式中的语法,该语法用于将值绑定到变量,但保持模式匹配。因此,这会绑定valuea(通过复制),然后继续匹配模式b @ c,该模式绑定valueb,依此类推。

但请不要。这很令人困惑,并且比编写多个语句几乎没有任何好处。