2014-03-29 64 views
1

我试图使用列表中的下列方法中的多个所有因素:为什么此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 

代替因素清单!如果做错了,该怎么办?

回答

5

upto与块用于返回的接收装置,2

一种更好的方式来写,这将是:

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

更好,更优雅/惯用,或更快? – TCSGrad

+0

如同更多的防错 – sawa

1

你必须在你find_factors方法的最后返回factors

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

呃! Facepalm :(对不起,浪费社区时间!!感谢您的快速响应! – TCSGrad

2

在Ruby中,只要您一个循环之前看到一个数组的初始化,通常可以将其转换为一个功能更强大的方法:

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

这往往是更紧凑,往往更易读。

相关问题