我有一些示例代码,看起来它使用了 ternery 运算符,但它需要 3 个项目。所以我真的很困惑,我在其他语言中看到的只取2,即true和false。
这是代码
Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker)
: (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(PROPERTY_ID)
: analytics.newTracker(R.xml.ecommerce_tracker);
我想做的是删除该行
: analytics.newTracker(R.xml.ecommerce_tracker);
现在就是这样
Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker)
: (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(PROPERTY_ID);
但它指出 IDE 中缺少 :(冒号)。那么也许这根本不是一个三元运算符?
我使用的IDE是Android Studio。
我知道这一定很简单,但我无法弄清楚。
有什么想法吗?
最佳答案
你所拥有的是嵌套三元运算符。将它们视为以下内容(下面的伪代码)
condition ? answerifTrue : secondternaryoperator;
where secondternaryoperator =
secondcondition ? answerifTrue : answerIfFalse;
基本上,这是两个三元运算符的组合。如果第一个条件为 true,则仅返回 answerifTrue
。但如果条件为假,它将运行第二个三元运算符来根据第二个条件确定要返回的内容。奇异三元运算符看起来就像这样;
condition ? answerifTrue : answerIfFalse;
因此,如果您想从两者创建一个三元运算符,则需要确定在第一个条件为 false 时想要哪个答案;
Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker) : analytics.newTracker(PROPERTY_ID);
但是,我想,您所需要的无论如何都不太适合三元运算符,您可能需要将语句完全重组为 if else
block 或 switch 语句。
关于Java:三元运算符,没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27874899/