Ruby FIzz buzz罐头';t将数字推送到数组中

Ruby FIzz buzz罐头';t将数字推送到数组中,ruby,fizzbuzz,Ruby,Fizzbuzz,所以,正如您所看到的,我对Ruby不太精通,所以如果您保持原始的响应,而不是使用快捷方式,这会有所帮助 在第一个示例中,我添加了绝对值方法来处理负输入,并使用变量轻松地适应将3和5更改为其他数字。但是,我不能将结果推送到数组中,结果是“1”。有人看到我哪里出错了吗 # not array - works class Fixnum define_method(:fizz_buzz) do fizz = 3 buzz = 5 1.upto(self.abs) do |i

所以,正如您所看到的,我对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

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

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
添加到末尾会使其返回数组。

该死!我总是忘记那部分。谢谢@rdubya