簡體   English   中英

使用本機方法替換冗長的代碼塊(Ruby on Rails)

[英]Replacing a verbose code block using native methods (Ruby on Rails)

我一直在嘗試學習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' => '' }是您的對象, numbers.size是起始位置, 5是結束位置。

如果numbers.size為5,則不會填寫任何內容。

http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-fill

Array類的Ruby文檔將是一個很好的起點。 在那里,您會發現構造和操作數組的不同方法。

例如,要構造一個由3個單空格字符串組成的數組:

[" "] * 3         => [" ", " ", " "]
Array.new(3, " ") => [" ", " ", " "]

然后,您可以使用+連接Array.new(3, " ") + numbers

Array類包括Enumeration ,以及Range 當用別的東西構造一個數組時, inject可能是有用的。

(1..3).inject(numbers) { |numbers, i| numbers.unshift(" ") } (1..3).inject(numbers) { |numbers, i| numbers.unshift(" ") }

也許是3 3.times { numbers.unshift(" ") }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM