Ruby on rails 使用本机方法替换详细的代码块(RubyonRails)

Ruby on rails 使用本机方法替换详细的代码块(RubyonRails),ruby-on-rails,ruby,Ruby On Rails,Ruby,我一直在尝试学习Rails中包含的方法,遇到了似乎应该有更好/更干净的方法来完成相同任务的情况,但我不确定如何改进 我最近遇到的一个例子如下所示,其中我有一个作为参数传入的散列数组。如果数组少于5个元素,那么我初始化元素,直到总共有5个 def do_stuff(numbers) raise "Maximum of 5 numbers can be defined in numbers array." if numbers.count > 5 blank_range = (numb

我一直在尝试学习Rails中包含的方法,遇到了似乎应该有更好/更干净的方法来完成相同任务的情况,但我不确定如何改进

我最近遇到的一个例子如下所示,其中我有一个作为参数传入的散列数组。如果数组少于5个元素,那么我初始化元素,直到总共有5个

def do_stuff(numbers)
  raise "Maximum of 5 numbers can be defined in numbers array." if numbers.count > 5
  blank_range = (numbers.count-1)..5
  if blank_range.count > 0
    blank_range.each do |i|
      numbers[i] = {"entry" = " "}
    end
  end
end
这是我想要的一个非常基本的例子,尽管这是我发现自己使用过几次的模式。有没有一种内置的方法可以做到这一点?

我认为方法
#fill
是您所需要的。它需要三个参数——一个附加到数组的对象和一个用该对象填充的范围

numbers.fill({ 'entry' => ' ' }, numbers.size...5)
因此,
{'entry'=>'}
是您的对象,
number.size
是起始位置,
5
是结束位置

如果
numbers.size
为5,则不填充任何内容


数组类的Ruby文档将是一个很好的起点。在那里,您将找到构造和操作数组的不同方法

例如,要构造包含3个单空格字符串的数组,请执行以下操作:

[" "] * 3         => [" ", " ", " "]
Array.new(3, " ") => [" ", " ", " "]
然后,您可以使用
+
连接数组,如
Array.new(3,“”)+numbers

数组类包括
枚举
范围
。从其他内容构造数组时,
inject
可能很有用

类似于
(1..3).注入(数字){|数字,i |数字.unshift(“”)}


或者可能是
3.times{numbers.unshift(“”)}

完美。谢谢你