2013-10-01 52 views
0

我有這樣一行:塊清除地圖紅寶石

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

回答

3

「移動塊」的最簡單方法就是使其成爲一種方法。

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) } 
+0

它的時候會比較好寫塊和屈服呢? –

+1

你錯過了一個'結束'。 – toro2k

+0

@NickGinanto當你不希望重用塊的任何部分。 – Max

0

拉姆達版本也是可能的,如果你喜歡的語法更好:

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 
+0

匿名函數在JavaScript中不像Ruby中那麼常見。你能給出一個可能出現的實例嗎? – Nikola