有什么办法可以将此代码重构得更小一些?

问题描述

| 我对原始代码进行了很好的修改,但是我没有看到任何方法来压缩这种较小的代码,而不会将检查内容植入模块中的另一个文件中。正则表达式文本对于每个when / x /来说都是不同的,因此我无法想到它们无法进一步组合
    case state
      when /OH|PA|MN/
        if @browser.text.include?(\"My text\")
            raise \"x\" unless /foo/.match(@browser.text)
            raise \"y\" unless /foo2/.match(@browser.text)
            raise \"z\" unless /foo3/.match(@browser.text)
        else
            raise \"x1\" unless /foofoo/.match(@browser.text)
            raise \"y1\" unless /foofoo2/.match(@browser.text)
            raise \"z1\" unless /foofoo3/.match(@browser.text)
        end
      when /IL|VA/
        if @browser.text.include?(\"My text\")
            raise \"x\" unless /foo/.match(@browser.text)
            raise \"y\" unless /foo2/.match(@browser.text)
            raise \"z\" unless /foo3/.match(@browser.text)
        else
            raise \"x1\" unless /foofoo/.match(@browser.text)
            raise \"y1\" unless /foofoo2/.match(@browser.text)
            raise \"z1\" unless /foofoo3/.match(@browser.text)
        end
      when /WI|SC|TN|IN|IA/
        if @browser.text.include?(\"My text\")
            raise \"x\" unless /foo/.match(@browser.text)
            raise \"y\" unless /foo2/.match(@browser.text)
            raise \"z\" unless /foo3/.match(@browser.text)
        else
            raise \"x1\" unless /foofoo/.match(@browser.text)
            raise \"y1\" unless /foofoo2/.match(@browser.text)
            raise \"z1\" unless /foofoo3/.match(@browser.text)
        end
      when /SC/
        if @browser.text.include?(\"My text\")
            raise \"x\" unless /foo/.match(@browser.text)
            raise \"y\" unless /foo2/.match(@browser.text)
            raise \"z\" unless /foo3/.match(@browser.text)
        else
            raise \"x1\" unless /foofoo/.match(@browser.text)
            raise \"y1\" unless /foofoo2/.match(@browser.text)
            raise \"z1\" unless /foofoo3/.match(@browser.text)
        end
      when /GA/
        if @browser.text.include?(\"My text\")
            raise \"x\" unless /foo/.match(@browser.text)
            raise \"y\" unless /foo2/.match(@browser.text)
            raise \"z\" unless /foo3/.match(@browser.text)
        else
            raise \"x1\" unless /foofoo/.match(@browser.text)
            raise \"y1\" unless /foofoo2/.match(@browser.text)
            raise \"z1\" unless /foofoo3/.match(@browser.text)
        end
      else
        raise \"Not a valid state\"
      end
    

解决方法

        我认为它与您的实际代码不同,因此您无法
if state =~/OH|PA|MN|IL|VA|WI|SC|TN|IN|IA|SC|GA/
    if @browser.text.include?(\"My text\")
        raise \"x\" unless /foo/.match(@browser.text)
        raise \"y\" unless /foo2/.match(@browser.text)
        raise \"z\" unless /foo3/.match(@browser.text)
    else
        raise \"x1\" unless /foofoo/.match(@browser.text)
        raise \"y1\" unless /foofoo2/.match(@browser.text)
        raise \"z1\" unless /foofoo3/.match(@browser.text)
    end
else
    raise \"Not a valid state\"
end
因为现在可以。因此,如果您真的想要一个答案,为什么要发布可以轻松减少的伪造代码?     ,        
raise \"Not a valid state\" unless %w[OH PA MN IL VA WI SC TN IN IA SC GA].include?(state)
if @browser.text.include?(\"My text\")
  raise case @browser.text
  when /foo/; \"x\"
  when /foo2/; \"y\"
  when /foo3/; \"z\"
  end
else
  raise case @browser.text
  when /foofoo/; \"x1\"
  when /foofoo2/; \"y1\"
  when /foofoo3/; \"z1\"
  end
end