0

我想知道是否有一种方法可以将多种方法组合成一个 using 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

当我单独测试它们时,它提供了正确的答案 like multiples(2,43)or summing([2,6,5,4]),但是当我将两者结合起来时summing(multiples(0,10)),我得到了错误的答案。

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

4

2 回答 2

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对您的任务没有帮助,因为它会在完成后返回接收器。

于 2013-10-03T19:27:55.950 回答
0

贾马尔,

您想summing返回sum(而不是n),所以sum最后需要:

   def summing(n)
     sum = 0
     n.each { |x| puts sum += x}
     sum
   end
于 2013-10-03T21:36:41.177 回答