- > < - 运算符有什么作用?

fre*_*low 73 java syntax obfuscation lambda java-8

我最近发现了以下代码:

IntPredicate neg = x -> x <- x;
Run Code Online (Sandbox Code Playgroud)

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

tob*_*s_k 90

没有-> <-操作员.第一个->是lambda语法,如Java 8中所介绍的那样,第二个<-是'小于' <和'一元减号' 的误导性连接-.

您可以将其读作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
Run Code Online (Sandbox Code Playgroud)

只是为了完整性:这个测试不仅(故意?)难以理解,而且 - 正如评论中指出的那样 - 它也失败了Integer.MIN_VALUE(这是==-Integer.MIN_VALUE).相反,你应该只使用更简单的方法IntPredicate neg = x -> (x < 0);.

  • @Gimby我想检查x是否小于3,因为`x <3`表示我对x的爱;) (34认同)
  • "所有负数都是这种情况"......除了`Integer.MIN_VALUE`;) (17认同)
  • 真的,你会想知道简单的`x <0`有什么问题 (14认同)
  • @MarkRotteveel你的版本看起来不像ASCII艺术,它只是可读. (7认同)
  • 如果你喜欢"反向lambda算子"那么你仍然可以使用`x < - 0` ...... (6认同)