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代码中。这是一种查找整数的所有因子的方法。有几个地方我对语法不太确定。
inject([])
- 我看到inject(:+)
和inject(:*)
添加/重叠到结果中。我想知道这是否要将其推入现有阵列?解释这种方法的最佳方法是什么?
inject([])
之后有一个do |f,i|
块。我不太确定i
是否与块外宣布的i
不同。我猜不是吗?我不太确定阻止试图实现的目标。
end.sort
,之前没见过。
非常感谢有关此代码块的建议!谢谢!
答案 0 :(得分:0)
my_array.inject(&:+)
与my_array.inject(0) do |a, b| a + b end
相同
第一个a
将为0
,第一个b
将成为my_array
的第一个元素
内部i
由inject方法设置,与外部i
的标识符不同。注入将执行类似yield(current_value, self[current_index])
的操作,这些将是您的|f,i|
在end.sort
中,end
是inject
方法调用的结束,因此它返回列表inject
返回的已排序列表。