[英]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,則不會填寫任何內容。
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.