如何处理 case 语句中的大量条件?
...我要写一个案例陈述,大约有 125 个什么时候。
这与我现在正在做的事情一致,基于我将节点添加到 Nokogiri XML 文档时的每一次,每一次在设置命名空间之前在节点中设置两个值:
case var
when :string
property_uom_node = Nokogiri::XML::Node.new "test_value", @ixml.doc
property_uom_node['att'] = "val"
property_uom_node.namespace = @ixml.doc.root.namespace_definitions.find{|ns| ns.prefix=="dt"}
property_uom_node
when :integer
#do something else
when :blue
...
#100 more when statements
...
end
我不是在寻找特定领域的建议,只要有一种干净的方法可以做到这一点,而不会以 300 行方法结束。
这就是我最终做的事情:
lookup = {:lup => ["1","2"], :wup => ["1","2"]}
case param
when lookup.has_key?(param)
property_uom_node = Nokogiri::XML::Node.new "#{lookup[param][0]}", @ixml.doc
property_uom_node['att'] = #{lookup[param][1]}
property_uom_node.namespace = @ixml.doc.root.namespace_definitions.find{|ns| ns.prefix=="dt"}
property_uom_node
end