我想知道有沒有我們可以用鏈表的方法的方式(&:法)在Ruby中使用符號#to_proc簡化的鏈接方法?
例如:
array.reject { |x| x.strip.empty? }
把它變成:
array.reject(&:strip.empty?)
我喜歡速記符號,由於其可讀性。
我想知道有沒有我們可以用鏈表的方法的方式(&:法)在Ruby中使用符號#to_proc簡化的鏈接方法?
例如:
array.reject { |x| x.strip.empty? }
把它變成:
array.reject(&:strip.empty?)
我喜歡速記符號,由於其可讀性。
不,沒有簡寫。你可以定義一個方法:
def really_empty?(x)
x.strip.empty?
end
,並使用method
:
array.reject(&method(:really_empty?))
或使用lambda:
really_empty = ->(x) { x.strip.empty? }
array.reject(&really_empty)
,但我不會把那些要麼更好,除非你有一個在足夠的地方使用really_empty?
來分解邏輯是有意義的。
不過,既然您使用Rails,你可以只使用blank?
代替.strip.empty?
:
array.reject(&:blank?)
注意nil.blank?
是真實的,而nil.strip.empty?
只是給了你一個例外,所以他們不太同等學歷;然而,你可能想要拒絕nil
s,所以使用blank?
可能會更好。 blank?
對於false
,{}
和[]
也會返回true,但您可能沒有那些字符串數組。
這將是相當不錯的寫上面這樣的,但它不是一個支持的語法,你會使用to_proc語法想鏈方法的方式(& :)就像這樣:
.map(&:strip).reject(&:empty?)
儘管在所有的現實,而不是試圖鏈在一起那樣,我會選擇使用你原來的例子,因爲它是。 – 2012-02-27 05:05:54
我剛剛進行了一次快速測試,結果發現以原來的方式做它的速度比在我的系統上快兩倍(這是有道理的,因爲另一個臨時數組必須作爲部分進行分配)的地圖)。 – 2012-02-27 05:15:42
在map之前調用'lazy'可能有助於提升性能。 – michau 2016-08-26 15:20:28
您可以用ampex
寶石做:
require 'ampex'
array.reject &X.strip.empty?
你也可以定義really_empty?方法放在「數組內容類」(例如String)上,然後像空白方法一樣使用它。我不建議這個,只是說你可以.. – Johannes 2015-12-14 09:59:35