分配多个变量的常用方法通常用C或Python等编程语言表示为:
a = b = c = value;
在Rust中是否有相同的内容,或者你需要写出来吗?
a = value;
b = value;
c = value;
如果这是显而易见的道歉,但我的所有搜索都会导致Q& A关于元组分配。
答案 0 :(得分:8)
不,没有等价物。是的,您必须编写多个作业,或编写本身进行多项作业的宏。
答案 1 :(得分:1)
作为DK。正确回答,您不能将作业的结果链接在一起。但是,您可以用一条语句为多个变量赋值。
在一个 let
statement 中,您可以使用赋值左侧的 irrefutable pattern 绑定多个名称:
let (a, b) = 1, 2;
您可以使用 slice pattern 作为赋值的左侧,并在右侧使用 array expression 来重复该值,如果它实现了 Copy:
let value = 42;
let [a, b, c] = [value; 3]; // or: let [mut a, mut b, mut c] = ...
println!("{} {} {}", a, b, c);
您目前无法在非let
赋值表达式中分配多个变量,但正在实施(请参阅 RFC 2909)并且可能在不久的将来稳定下来。
答案 2 :(得分:1)
使用 const generics:
fn main() {
let [a, b, c] = fill_new_slice(1);
dbg!(a, b, c);
}
fn fill_new_slice<T: Copy, const N: usize>(value: T) -> [T; N] {
[value; N]
}
$ cargo run --quiet
[src/main.rs:3] a = 1
[src/main.rs:3] b = 1
[src/main.rs:3] c = 1
答案 3 :(得分:0)
在 Rust 中,表达式 a = b = c = value;
与 a = (b = (c = value));
相同
(x = ...)
返回 ()
。然后,第一个表达式等效于以下内容:
c = value;
b = ();
a = ();
请注意,表达式的末尾有一个分号,但如果表达式在最后一行作为函数的返回值,如 a = b = c = value
,则等效如下:
c = value;
b = ();
a = () // without the semicolon