【发布时间】:2021-04-16 01:56:51
【问题描述】:
Rust 有几个无法链接的运算符(例如==、<)。
但是赋值运算符=可以链接起来。
a = b = 10;
在这种情况下,10 分配给b,单位() 分配给a。
Rust 允许我们像这样链接= 有什么原因吗?
我为此创建了Clippy issue 6576。
【问题讨论】:
-
赋值是允许在表达式上下文中使用它们的表达式,例如作为匹配臂中的结果表达式。赋值可能不是有用的在任何地方都需要一个表达式——例如在另一个赋值的右侧,或作为函数的参数。但是,在这些情况下,我看不出有任何明确禁止赋值的理由——无论如何你都会得到一个编译器错误,除非
a应该是()类型。 -
我认为这个设计决策没有更多意义——赋值是表达式似乎很有用,而且似乎没有必要在它们没有多大作用的上下文中明确禁止它们感觉。关于语言设计决策的问题通常有点难以回答,因为我们并不总是了解最初是如何做出这个决定的,尤其是在语言设计的早期做出的决定。
-
查看原始 RFC Require parenthesis for chained comparisons 以获得动机。
-
@kmdreko 据我所知,RFC 仅涉及比较运算符,而不涉及分配。