reduce 方法中的 :^ 是什么意思?

3

我在 Code Wars 上参加了一个挑战,其中给定一个数组“numbers”,数组中包含多个(有时重复的)整数,需要返回一个唯一的整数。我通过了这个挑战,但是当我查看之前提交的所有解决方案时,发现了这个 reduce 方法:

def stray (numbers)
  numbers.reduce(&:^)
end

我知道reduce方法一般的作用,但是我找不到符号^的含义。请问有谁能告诉我它的目的是什么?


3
提示:Integer#^ 是按位异或操作。Enumerable#reduce 可以通过应用该操作来合并数组的所有元素。请将以下内容翻译成中文: - spickermann
非提示:...而numbers.reduce(&:^)numbers.reduce { |result, result ^ n }的简写。顺便说一下,在这种情况下,可以简化为:numbers.reduce(:^)。后者使用Enumerable#reduce的第二种形式(又称为inject)。 - Cary Swoveland
你知道 foo(&:bar) 是什么意思吗?你知道在这个片段中 :bar 是什么意思吗?那么,从逻辑上讲,在 reduce(&:^) 这个片段中,:^ 代表什么意思呢? - Jörg W Mittag
1个回答

4

reduce方法用于数组中将所有元素组合成单个项。

reduce方法接受一个初始值和一段代码块。

你使用的是reduce的简写版本,意味着以下内容:

numbers.reduce(&:^)

&字符在方法调用或定义的最后一个参数时,将尝试在参数本身上调用该方法。^字符表示按位异或运算符

在Ruby中,inject也是reduce的别名。

您可以在这里阅读更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接