在一条线上的两个任务

时间:2013-03-06 01:19:57

标签: objective-c

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

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

我是否正确地假设此代码将conversation.lastMessageSentDatemessage.sentDate都设置为NSDate date

或者我误解了这行代码?

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

感谢。

2 个答案:

答案 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