Tim*_*sen 30 java integer conditional-operator
如果你试图找出int是否在数字之间,为什么不能这样做:
if(10 < x < 20)
Run Code Online (Sandbox Code Playgroud)
而不是它,你将不得不这样做
if(10<x && x<20)
Run Code Online (Sandbox Code Playgroud)
这似乎有点开销.
Ste*_*n C 21
一个问题是三元关系结构会引入严重的解析器问题:
<expr> ::= <expr> <rel-op> <expr> |
... |
<expr> <rel-op> <expr> <rel-op> <expr>
Run Code Online (Sandbox Code Playgroud)
当您尝试使用典型的PGS表达这些产品的语法时,您会发现在第一个时刻存在一个减少冲突的冲突<rel-op>.解析需要先查找任意数量的符号,以<rel-op>确定是否有一秒符号才能决定是否使用了二进制或三元形式.在这种情况下,您不能简单地忽略冲突,因为这会导致错误的解析.
我不是说这个语法是致命的歧义.但我认为你需要一个回溯解析器才能正确处理它.对于编程语言而言,这是一个严重的问题,快速编译是一个主要的卖点.
Pau*_*lin 10
这只是语法.'<'是二进制操作,大多数语言都不会使其传递.他们本可以像你说的那样做,但是后来有人会问为什么你不能在trinary做其他的操作."if(12 <x!= 5)"?
语法总是在复杂性,表达性和可读性之间进行权衡.不同的语言设计师有不同的选择 例如,SQL具有"x BETWEEN y AND z",其中x,y和z可以单独或全部为列,常量或绑定变量.我很高兴在SQL中使用它,我也很高兴不要担心为什么它不在Java中.
因为那个语法根本没有定义?此外,x < y评估为bool,那bool < int意味着什么?这不是真正的开销; 此外,你可以写一个实用工具方法,如果你真的想 - isBetween(10,x,20)- 我不会自己,但嘿......
你可以做自己的
public static boolean isBetween(int a, int b, int c) {
return b > a ? c > a && c < b : c > b && c < a;
}
Run Code Online (Sandbox Code Playgroud)
编辑:抱歉检查c是否在a和b之间
| 归档时间: |
|
| 查看次数: |
158686 次 |
| 最近记录: |