2012-02-02 34 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