2013-10-03 112 views
0

我想知道是否有方法將多種方法合併爲一種,使用Proc.newlambda或其他方法。將多種方法合併爲一種

此外,我的代碼有問題。

def multiples(n,p) 
    (n..p).each do |e| 
    puts e if e%2 == 0 or e%3 == 0 
    end 
end 

def summing(n) 
    sum = 0 
    n.each { |x| puts sum+=x } 
end 

它提供了當我分別測試他們像multiples(2,43)summing([2,6,5,4])正確的答案,但是當我將二者結合起來像summing(multiples(0,10)),我得到錯誤的答案。

如果有人能幫助我,那會很棒。

回答

0

下面應該工作..

def multiples(n,p) 
    (n..p).map do |e| 
    e if e%2 == 0 or e%3 == 0 
    end.compact 
end 

def summing(n) 
    sum = 0 
    n.each { |x| p sum+=x } 
end 

summing(multiples(0,10)) 
# >> 0 
# >> 2 
# >> 5 
# >> 9 
# >> 15 
# >> 23 
# >> 32 
# >> 42 

Array#each不會幫助你,爲你的任務,因爲它結束時返回接收者。

0

賈馬爾,

你想summing返回sum(而不是n),所以你需要sum底:

def summing(n) 
    sum = 0 
    n.each { |x| puts sum += x} 
    sum 
    end