【发布时间】:2019-10-29 20:13:58
【问题描述】:
我正在查看 Swift 语言参考中的 the description of the assignment operator。是否保证并行进行解构赋值?与串行分配相反。我没有在赋值运算符的描述中看到这一点。
需要明确的是,是否保证(a, b) = (b, a)(其中a 和b 是var)等价于foo = a、a = b、b = foo,其中foo 是保证不存在的变量,而不是a = b,b = a(这将产生a和b两者具有相同的值)。我尝试了(a, b) = (b, a),它似乎可以并行工作,但这与记录在案的行为描述不同。
【问题讨论】:
-
“但这与记录在案的行为描述不同。”好吧,文档没有提到它,所以你不能说它不是“相同的”。不幸的是,文档没有说很多事情。而且由于文档没有说,我将其称为 swift 编译器的“实现细节”。
-
@Sweeper 据我了解,OP 询问是否有可能以导致
a破坏b或反之亦然的方式发生此分配。如果是这样,那是语言语义的一个重要问题,而不仅仅是一个实现细节。 -
“我尝试过 (a, b) = (b, a),它似乎可以并行工作,但这与记录在案的行为描述不同。”您认为哪个“记录在案的行为描述”是矛盾的?你指的是“从值的每一部分到表达式的对应部分进行赋值”这句话吗?
-
@Alexander 我知道,但文档没有说明是否会发生破坏。因此,它是一个实现细节,从某种意义上说,由编译器决定如何处理赋值。从理论上讲,我可以编写一个几乎像
swiftc一样工作的编译器,除了它按顺序进行赋值,并且仍然称它为“Swift 编译器”,因为它按照参考文献所说的那样工作。 -
@Sweeper 你确定你真的想要那个吗? 1) 没有语言委员会和规范使您能够更快地移动 waaaaaay,2) 只有两种 Swift 实现(据我所知,Swift.org 和 Silver Elements Compiler),所以几乎不需要同步许多独立工作的团队,不像 JS(有几十个实现)等等。
标签: swift assignment-operator destructuring