2011-06-23 61 views
-4

我在原始代碼上做了一個很好的黑客攻擊和斜槓,但我沒有看到任何方式來壓縮這個較小的文件,而無需將檢查插入到模塊中的另一個文件中。正則表達式文本對於每個不同的時/ 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 
+2

這一切都認真選擇什麼錯誤返回??? –

+1

您可能想在Code Review Stack Exchange上發佈這類問題。但是,如果你得到4分贊成,你可能會做一些其他的錯誤。 –

+1

我認爲Code Review的人會把它扔回給我們。 :-) –

回答

1

我認爲它在你的實際代碼不同的充,這樣你不可能做

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 

因爲現在你可以。所以,如果你真的想要一個答案,你爲什麼發佈可以輕鬆減少的虛假代碼?

+1

我發佈了虛假代碼,因爲真實代碼是專有業務語言,我不想冒險失去我的工作.. – SamuraiJack

+1

哈哈,我明白,但如果每個'你'執行相同的代碼塊時,根本沒有理由擁有一個case語句。如果代碼是專有的,那麼不要發佈它,但除非你能做得比這更好一點,否則所有你會得到的是無益的答案,被誤解和大量的反對票 – loosecannon

1
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