代码之家  ›  专栏  ›  技术社区  ›  Joe Cannatti

在objective-c中,逗号用作语句分隔符时做什么?

  •  19
  • Joe Cannatti  · 技术社区  · 14 年前

    我正在查看来自第三方的一些源代码,并反复看到一个我不熟悉的语法。基本上,它们是用逗号而不是分号分隔语句。它编译并工作,但我不明白它在做什么。看起来是这样的

    if(url)[url release], url = nil;
    

    有时他们也会在没有中频的情况下使用它

    [url release], url = nil;
    

    这是怎么回事?

    3 回复  |  直到 11 年前
        1
  •  16
  •   Donal Fellows    14 年前

    与C和C++一样,逗号运算符在其左侧计算事物,然后计算右边的事物;表达式的整体值是右侧的值。基本上,这使得一个表达式可以做两件事(左侧的一件事可能是用于方法调用或赋值等副作用)。是的,语法与函数调用和变量声明中使用的语法有些模糊。

    在可能的情况下,我更喜欢使用包含多个语句的诚实块。更长,但最终更干净。也更容易调试。

        2
  •  3
  •   diederikh    14 年前

    这些是逗号分隔的表达式,从左到右进行计算,整个表达式的结果是最后一个计算的表达式。

        3
  •  2
  •   Alex Gray    11 年前

    这是其中之一 我最喜欢的 C、OBJC等的“特性”

    了解这个运算符可以解开 jquery-like.chain-able.commands 和更简洁的( 有人会认为可读性较差 )表达许多常见的成语。例如。。。

    -(id)init { 
         return self != super.init ? nil : [self setProperty:@"EPIC"], 
         NSLog(@"One line inits are: %@.", _property), self;        }
    

    原木 One line inits are: EPIC.