2013-10-03 5 views
0

Мне интересно, был ли способ объединить несколько методов в один, используя Proc.new, lambda или другим способом.Объединение нескольких методов в один

Также есть код с моим кодом ниже.

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

Jamaal,

Вы хотите summing вернуть sum (а не n), так что вам нужно sum в конце:

def summing(n) 
    sum = 0 
    n.each { |x| puts sum += x} 
    sum 
    end 
Смежные вопросы