以三重幸福的名义(以及对冗长的蔑视)......我希望,并且有点惊讶......
BOOL isItOpen = YES;
isItOpen = (isItOpen ? YES : NO); // yes, dumbie, it's open.
工作正常......但是......
isItOpen = (isItOpen ? [it close] && NO : [it open] && YES);
导致 二进制表达式的无效操作数('void' 和 'int')
关于是否可以像在比如,BASH 或 PHP。我尝试了 &
和 &&
安排的各种组合,但无济于事......因为我是一个 C
白痴......但如果这种“方式这样做”在语言上是不可能的……有没有另一个-同样简洁? (即,不涉及if
?)
最佳答案
C(以及 C++ 和 Objective-C1)运算符构成 expressions ;它们旨在评估一个值,而不是控制程序流。
所以 ?:
、&&
和 ||
都提供 short-circuit evaluation对于它们的参数,您不能使用它们来有条件地调用任意函数;2 为此,您应该使用传统的控制流结构(即 if
)。
您可以使用鲜为人知的 comma operator实现这一点,但我强烈建议您不要,因为它非常不合时宜,而且难以阅读。例如:
isItOpen = condition ? (func1(), NO) : (func2(), YES);
<子>
- 实际上,我不了解 Objective-C。众所周知,这是可能的!
- “任意”是指返回
void
的函数,或者在&&
的情况下不能隐式转换为bool
的类型> 和||
,或者在?:
情况下的非匹配类型。
关于objective-c - 在 Objective-C 中使用三元运算符 + && 执行赋值和操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811044/