将多种方法合二为一

时间:2013-10-03 19:25:01

标签: ruby methods lambda proc

我想知道是否有办法使用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))时,我会得到错误答案。

如果有人可以帮助我,那就太好了。

2 个答案:

答案 0 :(得分: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对你的任务没有帮助,因为它在完成后返回接收器。

答案 1 :(得分:0)

马格,

您希望summing返回sum(而不是n),因此最后需要sum

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