为什么 Rust 中可以链式赋值运算符?

fiv*_*ven 6 assignment-operator rust

Rust 有几个不能链接的运算符(==例如<)。

但赋值运算符= 可以被链接起来。

a = b = 10;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,10 被分配给b,单位()被分配给a

=Rust 允许我们这样链接有什么原因吗?

我为此创建了Clippy 问题 6576 。

The*_*rop 0

Rust 中的几乎所有内容都是表达式而不是语句。语句和表达式之间的主要区别在于表达式执行后返回一个值。

这也适用于赋值操作,在 Rust 中被视为表达式。赋值表达式有返回值(),也称为单位值。这对你的程序有什么影响?

这意味着你的任务

a = b = 10
Run Code Online (Sandbox Code Playgroud)

被解析为

a = (b = 10)
Run Code Online (Sandbox Code Playgroud)

请注意, 的返回值b = 10()(因为它是一个表达式),因此该返回值被分配给a