我最近遇到了以下代码:
IntPredicate neg = x -> x <- x;
这是什么,某种反向双λ?
我最近遇到了以下代码:
IntPredicate neg = x -> x <- x;
这是什么,某种反向双λ?
Answers:
没有-> <-
操作员。第一个->
只是Java 8中引入的lambda语法,第二个<-
是误导性的“小于”<
和“一元减”的串联-
。
您可以将其读取为IntPredicate neg = (x) -> (x < (-x));
,即它会测试是否x
小于-x
,所有(很好,大多数)负数就是这种情况,因此命名为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);
。
Integer.MIN_VALUE
;)
x <3
表达了我对x的爱;)
x <- 0
如果您如此喜欢“反向lambda运算符”,您仍然可以使用…
(x) -> (x < -x)