在一些旧的Objective-C代码库中,我不小心放错了左括号,试图向对象发送消息。
// I meant to type object = [object someEncodingMethod]
[object = object someEncodingMethod];
这编译和运行得很好,但在此行之后,原始object
变量不会被修改。实际的代码很容易修复,但我很好奇这一行到底是什么意思。
没有什么特别花哨的事情发生。您已将 object
的值分配给变量 object
,然后向该值发送了一条消息。被调用方法的返回值被丢弃。
我相信任何对编译器来说看起来像是对象类型的表达式在消息发送的发送者位置都是合法的。在 C 中,赋值是计算结果为赋值的表达式。(例如,比较if( 0 != (result = makeABox()) )
或离家更近的if(( self = [super init] ))
。