为什么这个Ruby代码没有返回预期的答案?

时间:2014-03-29 00:53:51

标签: ruby

我使用以下方法尝试列出数字的所有因子:

def find_factors(n)
  factors = []
  2.upto(n-1) {|x| factors << x if n % x == 0}
end

factor = find_factors(24)
puts factor

打印出以下内容:

2

而不是因素列表!如果做错了怎么办?

3 个答案:

答案 0 :(得分:5)

与块一起使用的

upto将返回接收者,即2

更好的方法是:

def find_factors(n)
  2.upto(n-1).select{|x| (n % x).zero?}
end

答案 1 :(得分:2)

在ruby中,无论何时在循环之前看到数组初始化,通常都可以将其转换为更具功能性的方法:

def find_factors(n)
  2.upto(n-1).select{|x| n % x == 0}
end

这往往更紧凑,而且往往更具可读性。

答案 2 :(得分:1)

您必须在factors方法结束时返回find_factors

def find_factors(n)
  factors = []
  2.upto(n-1) {|x| factors << x if n % x == 0}
  factors
end