所以,正如你所看到的,我并不精通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
答案 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
添加到末尾会使它返回数组。