我在 Code Wars 上参加了一个挑战,其中给定一个数组“numbers”,数组中包含多个(有时重复的)整数,需要返回一个唯一的整数。我通过了这个挑战,但是当我查看之前提交的所有解决方案时,发现了这个 reduce 方法: def stray (numbers) numbers.reduce(&:^) end 我知道reduce方法一般的作用,但是我找不到符号^的含义。请问有谁能告诉我它的目的是什么?
reduce方法用于数组中将所有元素组合成单个项。 reduce方法接受一个初始值和一段代码块。 你使用的是reduce的简写版本,意味着以下内容: numbers.reduce(&:^) &字符在方法调用或定义的最后一个参数时,将尝试在参数本身上调用该方法。^字符表示按位异或运算符。 在Ruby中,inject也是reduce的别名。 您可以在这里阅读更多信息。
Integer#^
是按位异或操作。Enumerable#reduce
可以通过应用该操作来合并数组的所有元素。请将以下内容翻译成中文: - spickermannnumbers.reduce(&:^)
是numbers.reduce { |result, result ^ n }
的简写。顺便说一下,在这种情况下,可以简化为:numbers.reduce(:^)
。后者使用Enumerable#reduce的第二种形式(又称为inject
)。 - Cary Swovelandfoo(&:bar)
是什么意思吗?你知道在这个片段中:bar
是什么意思吗?那么,从逻辑上讲,在reduce(&:^)
这个片段中,:^
代表什么意思呢? - Jörg W Mittag