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