2012-02-02 33 views
0

我在Ruby中很新,所以想知道和學習如何幹。我有2如果語句非常相似,是否有重構它?重構2類似如果語句在紅寶石

msg1,msg2 = msg.split('.') 

if !msg1.nil? 
    items = msg1.split(',') 
    items.each do |item| 
    item.strip! 
    end 
    somefunction(items) 
end 

if !msg2.nil? 
    items = msg2.split(',') 
    items.each do |item| 
    item.strip! 
    end 
    somefunction(items) 
end 

回答

4

貌似可以破除兩個變量:

msg.split('.').each do |msg| 
items = msg.split(',').map(&:strip) 
somefunction(items) 
end 

編輯:我刪除了unless因爲通過split創建數組將不包含任何。在你的原始代碼中,如果數組有0或1個元素,但是通過使用each,這變得不必要。

+0

看起來很酷。讓我試試看。謝謝! – revolver 2012-02-02 08:19:00

+0

你能解釋一下地圖(&:strip)嗎? – revolver 2012-02-02 08:29:45

+1

它基本上是'map {| x | x.strip}'。 'map'類似於'each',但收集數組中的所有結果(因此它也被稱爲「collect」)。爲了理解'&:'在'Symbol#to_proc'方法上的閱讀。 – 2012-02-02 08:40:48

1

我們可以在一行中寫出相同的內容。

message.split('.').each{|msg| somefunction msg.split(',').collect(&:strip) } 
+0

非常感謝! – revolver 2012-02-03 03:21:36