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

Ruby FIzz-buzz can't push numbers to an array

因此,如您所见,我并不精通 Ruby 因此,如果您保持原始的回答而不是使用捷径,这会有所帮助。

我能够在第一个示例中使用我的嘶嘶声,我添加了绝对方法来处理负输入并使用变量来轻松适应将 3 和 5 更改为其他数字。但是,我无法将结果推送到数组,结果我只得到“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

您需要 return 函数末尾的数组。

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 中,函数的最后一行用作您的 return 值。当您调用 1.upto 时,它会运行给定的块指定的次数,然后 return 运行 1。在末尾添加 array 使其成为 return 数组。