我最近遇到了以下代码:

IntPredicate neg = x -> x <- x;

这是什么,某种反向双λ?

最佳答案

没有-> <-运算符。如Java 8中所介绍的那样,第一个->只是lambda语法,而第二个<-是“小于” <和“一元减” -的误导性串联。

您可以将其读取为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

仅出于完整性考虑:此测试不仅(有意地?)难以理解,而且-如注释中所指出-对于Integer.MIN_VALUE(即==-Integer.MIN_VALUE)也失败。相反,您可能应该只使用更简单的IntPredicate neg = x -> (x < 0);

07-25 20:24