-> <- 运算符是做啥的?

Posted

技术标签:

【中文标题】-> <- 运算符是做啥的?【英文标题】: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 这很难保证。你或我可能会,但是经历了艰难一天的其他人可能仍然无法解析正在发生的事情。无论如何,由于它不是一个精确重复的,它变得有点主观,而且没有接近投票似乎表明大多数人希望这个问题留下来。 【参考方案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...

以上是关于-> <- 运算符是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章

例如 %+% 是做啥的?在 R 中

脚本是啥意思,是做啥的啊?

for(int i : x) 是做啥的? [复制]

addScalar 是做啥的?

LoaderManager 是做啥的?

sizeof 是做啥的?