我知道在Objective C中使用了这样的代码。
_conversation.lastMessageSentDate = message.sentDate = [NSDate date];
我是否正确地假设此代码同时设置了conversation.lastMessageSentDate
和?message.sentDate
NSDate date
还是我误解了这行代码?
其他语言有这样的格式吗?我用 Python 和 Java 编程过,从来没有见过这样的代码。
谢谢。
我知道在Objective C中使用了这样的代码。
_conversation.lastMessageSentDate = message.sentDate = [NSDate date];
我是否正确地假设此代码同时设置了conversation.lastMessageSentDate
和?message.sentDate
NSDate date
还是我误解了这行代码?
其他语言有这样的格式吗?我用 Python 和 Java 编程过,从来没有见过这样的代码。
谢谢。
这不是两个声明,而是两个赋值语句。你对它的工作方式也是绝对正确的。
它起作用的原因是赋值表达式是产生值的有效表达式。最右边的作业首先被评估
message.sentDate = [NSDate date]
然后是第二个作业:
_conversation.lastMessageSentDate = /*the result of the first assignment*/
请注意,这是评估的顺序,而不是实际分配的顺序:这些可能以任何顺序发生,因为在没有序列点的情况下未指定副作用的顺序。
多重作业在许多语言中很常见,人们只是比单一作业少使用它们。
Ruby 通过多个赋值做了一些有趣的事情,例如:
name, address1, address2, city, step = record.split(',') # split a CSV record into multiple fields