Ruby FIzz-buzz无法将数字推送到数组

时间:2015-09-07 18:40:06

标签: ruby fizzbuzz

所以,正如你所看到的,我并不精通Ruby,所以如果你保持你的回答是原始的,而不是使用捷径,这会有所帮助。

我能够在第一个例子中使用我的fizz-buzz,我添加了处理负输入的绝对方法,并使用变量轻松适应将3和5更改为其他数字。但是,我无法将结果推送到阵列,我只是得到了#1;' 1'结果是。有谁看到我哪里出错了?

# not array - works
class Fixnum
  define_method(:fizz_buzz) do
    fizz = 3
    buzz = 5

    1.upto(self.abs) do |i|
      if (i % fizz == 0) && (i % buzz == 0)
        puts "fizz-buzz"
      elsif (i % fizz == 0)
        puts "fizz"
      elsif (i % buzz == 0)
        puts "buzz"
      else
        puts i
      end
    end
  end
end


# push to array - doesn't work
class Fixnum
  define_method(:fizz_buzz) do
    fizz = 3
    buzz = 5
    array = []

    1.upto(self.abs) do |i|
      if (i % fizz == 0) && (i % buzz == 0)
        array.push("fizz-buzz")
      elsif (i % fizz == 0)
        array.push("fizz")
      elsif (i % buzz == 0)
        array.push("buzz")
      else
        array.push(i)
      end
    end
  end
end
=> 1 

WW

1 个答案:

答案 0 :(得分:2)

您需要在函数末尾返回数组。

class Fixnum
  define_method(:fizz_buzz) do
    fizz = 3
    buzz = 5
    array = []

    1.upto(self.abs) do |i|
      if (i % fizz == 0) && (i % buzz == 0)
        array.push("fizz-buzz")
      elsif (i % fizz == 0)
        array.push("fizz")
      elsif (i % buzz == 0)
        array.push("buzz")
      else
        array.push(i)
      end
    end
    array
  end
end

在ruby中,函数的最后一行用作返回值。当您调用1.upto时,它会按指定的次数运行给定的块,然后返回1。将array添加到末尾会使它返回数组。