我有這樣一行:塊清除地圖紅寶石
my_array.map do |x|
if x.to_i == 0
x.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(x).name
end
end
我想打掃一下,和塊移動到一個功能,我可以重複使用。
我該怎麼做?我應該在函數中寫一個塊嗎?或者一個常規功能,但是我怎樣才能使用map
?
我有這樣一行:塊清除地圖紅寶石
my_array.map do |x|
if x.to_i == 0
x.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(x).name
end
end
我想打掃一下,和塊移動到一個功能,我可以重複使用。
我該怎麼做?我應該在函數中寫一個塊嗎?或者一個常規功能,但是我怎樣才能使用map
?
「移動塊」的最簡單方法就是使其成爲一種方法。
def foo x
if x.to_i == 0
x.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(x).name
end
end
my_array.map { |x| foo(x) }
拉姆達版本也是可能的,如果你喜歡的語法更好:
name_of_item = ->(item) do # use "lambda do |item|" in older versions of ruby.
if item.to_i == 0
item.starts_with?("new") ? x[3..-1] : ''
else
Tag.find(item).name
end
end
my_array.map &name_of_item
匿名函數在JavaScript中不像Ruby中那麼常見。你能給出一個可能出現的實例嗎? – Nikola
它的時候會比較好寫塊和屈服呢? –
你錯過了一個'結束'。 – toro2k
@NickGinanto當你不希望重用塊的任何部分。 – Max