Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中重构2个类似的if语句_Ruby_Refactoring - Fatal编程技术网

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

在ruby中重构2个类似的if语句,ruby,refactoring,Ruby,Refactoring,我是Ruby的新手,所以想知道并学习如何干燥。我有两个非常相似的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

我是Ruby的新手,所以想知道并学习如何干燥。我有两个非常相似的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 

看起来您可以去掉两个变量:

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

编辑:我删除了
,除非
,因为由
split
创建的数组将不包含任何内容。在您的原始代码中,如果数组有0或1个元素,这是有意义的,但是通过使用
每个
这就变得不必要了。

看起来您可以去掉这两个变量:

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

编辑:我删除了
,除非
,因为由
split
创建的数组将不包含任何内容。在您的原始代码中,如果数组有0或1个元素,这是有意义的,但是通过使用
每个
这就变得不必要了。

我们可以在一行中写入相同的元素

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

我们可以在一行中写同样的内容

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

你能解释一下地图(&:strip)吗?它基本上是
map{x | x.strip}
<代码>映射类似于
每个
,但在一个数组中收集所有结果(因此它也被别名为
收集
)。为了理解
&:
请阅读
符号#to_proc
方法。您能解释一下地图(&:strip)吗?它基本上是
地图{x | x.strip}
<代码>映射类似于
每个
,但在一个数组中收集所有结果(因此它也被别名为
收集
)。要了解
&:
请阅读
符号#to_proc
方法。