4

我知道在Objective C中使用了这样的代码。

_conversation.lastMessageSentDate = message.sentDate = [NSDate date];

我是否正确地假设此代码同时设置了conversation.lastMessageSentDate和?message.sentDateNSDate date

还是我误解了这行代码?

其他语言有这样的格式吗?我用 Python 和 Java 编程过,从来没有见过这样的代码。

谢谢。

4

2 回答 2

5

这不是两个声明,而是两个赋值语句。你对它的工作方式也是绝对正确的。

它起作用的原因是赋值表达式是产生值的有效表达式。最右边的作业首先被评估

message.sentDate = [NSDate date]

然后是第二个作业:

_conversation.lastMessageSentDate = /*the result of the first assignment*/

请注意,这是评估的顺序,而不是实际分配的顺序:这些可能以任何顺序发生,因为在没有序列点的情况下未指定副作用的顺序。

于 2013-03-06T01:24:51.560 回答
0

多重作业在许多语言中很常见,人们只是比单一作业少使用它们。

Ruby 通过多个赋值做了一些有趣的事情,例如:

name, address1, address2, city, step = record.split(',')  # split a CSV record into multiple fields 
于 2013-03-06T01:24:57.707 回答