我不确定这是什么,但让我来告诉你问题所在.

def factors num
  (1..num).select {|n| num % n == 0}
end

def mutual_factors(*nums)
  nums
    .map { |n| factors(n) }
    .inject(:&)
end




p mutual_factors(50, 30)            # [1, 2, 5, 10]
p mutual_factors(50, 30, 45, 105)   # [1, 5]
p mutual_factors(8, 4)              # [1, 2, 4]
p mutual_factors(8, 4, 10)          # [1, 2]
p mutual_factors(12, 24)            # [1, 2, 3, 4, 6, 12]
p mutual_factors(12, 24, 64)        # [1, 2, 4]
p mutual_factors(22, 44)            # [1, 2, 11, 22]
p mutual_factors(22, 44, 11)        # [1, 11]
p mutual_factors(7)                 # [1, 7]
p mutual_factors(7, 9)              # [1]

with this being the portion in questioning:

nums
  .map { |n| factors(n) }
  .inject(:&)

好的,这是我的思维轨迹:首先,map使用helper方法获取因子,并将因子输出到另一个数组中,然后该数组被注入?

我认为

.inject(:&)

是什么让我讨厌.我在上面运行了一个快速的谷歌,但除了数组求和和之类的基本功能,我还没有使用inject.我也做过类似的事情

test =  "hello".split("").map(&:upcase)
p test.join

但是.inject(:&)?我知道&是一个过程,但我只在争论中使用过.我不知道幕后的基本原理.请在向我解释这一点时考虑我的当前级别=),我知道基本注入是如何工作的,还有splat操作符.

推荐答案

部分报价形成Enumerable#inject份文件.

inject(symbol) → object

[...]

通过以下任一方式返回由操作数构成的对象:

一个名为symbol的方法.

[...]

使用方法名参数符号,使用以下方法组合操作数:

# Sum, without initial_operand.
(1..4).inject(:+)     # => 10

这意味着在inject的上下文中,(:&)不是一个proc,而只是一个符号:&,它告诉inject要执行什么操作来组合数组中的元素.

让我们看看这个例子:

mutual_factors(8, 4, 10)
#=> [1, 2]

让我们看看每一步都会发生什么:

nums
  .map { |n| factors(n) } #=> [[1, 2, 4, 8], [1, 2, 4], [1, 2, 5, 10]]
  .inject(:&)             #=> [1, 2, 4, 8] & [1, 2, 4] & [1, 2, 5, 10]

Array#&是一个方法,它返回一个新数组,其中包含两个数组中找到的每个元素(省略重复项).

Ruby相关问答推荐

ruby 3.1:使用方法(:名称)简化代码莫名其妙地失败

带有虾Ruby 的动态标题

如何使用Ruby range?

使用数组作为其中之一转换键和值

Ruby - 给定一个嵌套数组的数组,如何仅比较每个嵌套数组的最后一个值来找到最大值?

为什么在 Ruby 中将 0 视为 True?

如何通过 Rack 提供静态文件?

Ruby 连接字符串并添加空格

如何在 linux (ubuntu) 上更新 ruby​​?

在包含任意数量的嵌套散列和数组的散列中查找键/值对

`require': no such file to load in ruby

Sinatra 是多线程的吗?

Ruby 与计算机科学相关的 yield 特性

Ruby中block和&block的区别

如何只获取没有命名空间的类名

Ruby 将 CSV 文件读取为 UTF-8 和/或将 ASCII-8Bit 编码转换为 UTF-8

如何使用 link_to Ruby on rails 添加确认消息

为什么表达式 (true == true == true) 会产生语法错误?

如何在器上下文中运行 ruby​​ 脚本?

解析带有标题字段的 CSV 文件作为每行的属性