Есть ли лучшая практика для этого фрагмента кода? - PullRequest
3 голосов
/ 19 февраля 2012
class MyWatir < Watir::Browser
  def with_watir_window(win)
    cw = window   #current window
    win.use
    yield
    cw.use
  end
  def qty     
    ret = nil                
    with_watir_window(@win2){
      ret = td(:id,'qty').text
    }      
    ret
  end 
end

Во второй функции объявление ret = nil и указание его в конце кажется уродливым. Есть ли более чистый способ вернуть значение?

1 Ответ

8 голосов
/ 19 февраля 2012

Просто верните внутреннее значение из блока. Также убедитесь, что в случае возникновения исключения вы оставляете в согласованном состоянии:

class MyWatir < Watir::Browser
  def with_watir_window(win)
    cw = window   #current window
    win.use
    # the begin/end will evaluate to the value returned by `yield`.
    # if an exception occurs, the window will be reset properly and
    # there will be no return value.
    begin
      yield
    ensure
      cw.use
    end
  end

  def qty                     
    with_watir_window(@win2) do  
      td(:id,'qty').text
    end
  end 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...