рефакторинг 2 похожих оператора if в ruby - PullRequest
0 голосов
/ 02 февраля 2012

Я совсем новичок в Ruby, поэтому хотел бы узнать и научиться сушить.У меня есть 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 

Ответы [ 2 ]

4 голосов
/ 02 февраля 2012

Похоже, вы можете покончить с двумя переменными:

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

Редактировать: я удалил unless, так как массив, созданный split, не будет содержать никаких. В вашем исходном коде это имело смысл в случае, если массив имел 0 или 1 элемент, но при использовании each это становится ненужным.

1 голос
/ 02 февраля 2012

Мы можем написать то же самое в одной строке.

message.split('.').each{|msg| somefunction msg.split(',').collect(&:strip) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...