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