在ruby中重构2个类似的if语句

时间:2012-02-02 08:10:57

标签: ruby refactoring

我是Ruby的新手,所以想知道并学习如何干。我有2个if语句非常相似,无论如何重构它?

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 

2 个答案:

答案 0 :(得分:4)

看起来你可以废除这两个变量:

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

修改:我删除了unless,因为split创建的数组不包含任何内容。在原始代码中,如果数组包含0或1个元素,则有意义,但使用each则不需要这样做。

答案 1 :(得分:1)

我们可以在一行中写出相同的内容。

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