-> <- 运算符是做啥的?
Posted
技术标签:
【中文标题】-> <- 运算符是做啥的?【英文标题】:What does the -> <- operator do?-> <- 运算符是做什么的? 【发布时间】:2014-09-16 06:45:06 【问题描述】:我最近发现了以下代码:
IntPredicate neg = x -> x <- x;
这是什么,某种反向双 lambda?
【问题讨论】:
我的猜测:Lambda(x) -> (x < -x)
这就是括号有时有用的例子。
可能和--> operator有关
@rightfold 我不同意。 “重复”问题是关于 C++,而不是 Java,这个问题是在 Java 引入 lambda 表达式之前几年提出的。
@rightfold 这很难保证。你或我可能会,但是经历了艰难一天的其他人可能仍然无法解析正在发生的事情。无论如何,由于它不是一个精确重复的,它变得有点主观,而且没有接近投票似乎表明大多数人希望这个问题留下来。
【参考方案1】:
没有-> <-
运算符。第一个 ->
只是 lambda 语法,正如 Java 8 中引入的那样,第二个 <-
是“小于”<
和“一元减号”-
的误导性串联。
您可以将其读作IntPredicate neg = (x) -> (x < (-x));
,即它测试x
是否小于-x
,对于所有(嗯,most)负数都是如此,因此名称为neg
。
IntPredicate neg = x -> x <- x;
System.out.println(neg.test(4)); // false
System.out.println(neg.test(0)); // false
System.out.println(neg.test(-4)); // true
只是为了完整性:这个测试不仅(故意?)难以理解,而且——正如 cmets 中所指出的——它对于Integer.MIN_VALUE
(即==-Integer.MIN_VALUE
)也失败了。相反,您应该只使用更简单的IntPredicate neg = x -> (x < 0);
。
【讨论】:
“所有负数都是这种情况”...除了Integer.MIN_VALUE
;)
@MarkRotteveel 你的版本看起来不像 ASCII 艺术,它只是可读的。
@Gimby 我喜欢检查 x 是否小于 3,因为x <3
表达了我对 x 的爱 ;)
如果你非常喜欢“反向 lambda 运算符”,你仍然可以使用 x <- 0
...以上是关于-> <- 运算符是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章