【问题标题】:What does the -> <- operator do?-> <- 运算符是做什么的?
【发布时间】:2014-09-16 06:45:06
【问题描述】:

我最近发现了以下代码:

IntPredicate neg = x -> x <- x;

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

【问题讨论】:

  • 我的猜测:Lambda (x) -&gt; (x &lt; -x)
  • 这就是括号有时有用的例子。
  • 可能和--> operator有关
  • @rightfold 我不同意。 “重复”问题是关于 C++,而不是 Java,这个问题是在 Java 引入 lambda 表达式之前几年提出的。
  • @rightfold 这很难保证。你或我可能会,但是经历了艰难一天的其他人可能仍然无法解析正在发生的事情。无论如何,由于它不是一个精确重复的,它变得有点主观,而且没有接近投票似乎表明大多数人希望这个问题留下来。

标签: java syntax lambda obfuscation java-8


【解决方案1】:

没有-&gt; &lt;- 运算符。第一个 -&gt; 只是 lambda 语法,正如 Java 8 中引入的那样,第二个 &lt;- 是“小于”&lt; 和“一元减号”- 的误导性串联。

您可以将其读作IntPredicate neg = (x) -&gt; (x &lt; (-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 -&gt; (x &lt; 0);

【讨论】:

  • “所有负数都是这种情况”...除了Integer.MIN_VALUE ;)
  • @MarkRotteveel 你的版本看起来不像 ASCII 艺术,它只是可读的。
  • @Gimby 我喜欢检查 x 是否小于 3,因为x &lt;3 表达了我对 x 的爱 ;)
  • 如果你非常喜欢“反向 lambda 运算符”,你仍然可以使用 x &lt;- 0...
猜你喜欢
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
相关资源
最近更新 更多