我正在查看来自第三方的一些源代码,并且我反复看到一种对我来说不熟悉的语法。基本上他们用逗号分隔语句而不是分号。它编译和工作,但我不明白它在做什么。它看起来像是
if(url)[url release], url = nil;
并且他们也使用它而不是有时候
[url release], url = nil;
这里发生了什么?
答案 0 :(得分:16)
在C和C ++中,逗号运算符计算左侧的东西,然后计算右侧的东西;表达式的总值是右侧的值。基本上,这允许单个表达式做两件事(左侧的那个可能是用于副作用,例如方法调用或赋值)。是的,语法与函数调用和变量声明中使用的语法有些模糊。
我更喜欢在可能的情况下使用包含多个语句的诚实块。更长,但最终更清洁。也更容易调试。
答案 1 :(得分:3)
这些是逗号分隔的表达式,从左到右进行计算,整个表达式的结果是评估的最后一个表达式。
答案 2 :(得分:2)
这是C,ObjC等 我最喜欢的 “功能”之一......
理解这个操作符可以解锁 jQuery-like.chain-able.commands 的各种可能性,并且更简洁( thoug-some-would-argue-less-readable )许多常见习语的表达。例如......
-(id)init {
return self != super.init ? nil : [self setProperty:@"EPIC"],
NSLog(@"One line inits are: %@.", _property), self; }
日记➜
One line inits are: EPIC.