我没有这样的问题,但我对Ruby很新。我在一个方法中有以下3个可重复的代码,我想知道真正的Rubyist如何首先删除重复,然后让它更可重用。
以下是相关代码:
file = File.new( destination)
doc = REXML::Document.new file
doc.elements.each("configuration/continuity2/plans") do |element|
element.attributes["storebasedir"] = "#{TEST_OUTPUT_DIRECTORY}"
end
doc.elements.each("configuration/add").each do |database|
database.raw_attributes = database.attributes.merge("connectionstring" => "#{TEST_CONNECTION_STRING}")
end
doc.elements.each("configuration/connectionStrings/plans") do |connectionString|
connectionString.raw_attributes = connectionString.attributes.merge("connectionString" => "#{TEST_CONNECTION_STRING}")
end
任何建议表示赞赏。
答案 0 :(得分:3)
最后两个块可以替换为
["add", "connectionStrings/plans"].each do |elt_name|
doc.elements.each("configuration/#{elt_name}").do |elt|
elt.raw_attributes = elt.attributes.merge("connectionString" => "#{TEST_CONNECTION_STRING}")
end
end
我认为“connectionstring”和“connectionString”之间的大小写是偶然的。如果是这样,那恰恰说明了删除重复的好处。
此外,您可以将"#{TEST_CONNECTION_STRING}"
替换为TEST_CONNECTION_STRING
。
答案 1 :(得分:2)
您可以尝试添加一个尽可能通用的方法来避免这种情况,但它们对我来说有很大的不同......您可能会因为能够将这些行包装到单个方法中而面临复杂的代码。
答案 2 :(得分:2)
我没有看到重复。您正在迭代和完全不同的集合以及您在每个元素上执行的操作也非常不同。我同意Olivier的观点,任何删除重复的尝试都只会导致更复杂的代码。