Ruby的因子方法解释

时间:2015-04-04 22:02:56

标签: ruby

class Integer
  def factors
    1.upto(Math.sqrt(self)).select {|i| (self % i).zero?}.inject([]) do |f, i| 
      f << self/i unless i == self/i
      f << i
    end.sort
  end
end
[45, 53, 64].each {|n| puts "#{n} : #{n.factors}"}

在上面的Ruby代码中。这是一种查找整数的所有因子的方法。有几个地方我对语法不太确定。

  1. inject([]) - 我看到inject(:+)inject(:*)添加/重叠到结果中。我想知道这是否要将其推入现有阵列?解释这种方法的最佳方法是什么?

  2. inject([])之后有一个do |f,i|块。我不太确定i是否与块外宣布的i不同。我猜不是吗?我不太确定阻止试图实现的目标。

  3. end.sort,之前没见过。

  4. 非常感谢有关此代码块的建议!谢谢!

1 个答案:

答案 0 :(得分:0)

  1. my_array.inject(&:+)my_array.inject(0) do |a, b| a + b end相同 第一个a将为0,第一个b将成为my_array的第一个元素

  2. 内部i由inject方法设置,与外部i的标识符不同。注入将执行类似yield(current_value, self[current_index])的操作,这些将是您的|f,i|

  3. end.sort中,endinject方法调用的结束,因此它返回列表inject返回的已排序列表。