Лучшая альтернатива попытке (: вывод) .try (: данные) .try (: имя)?

Вы выполняете это по направляющим? Если так, это не инициализация RSPEC, это медленно, это - направляющие. Направляющие должны инициализировать всю кодовую базу и Ваш прежде, чем выполнить спецификации. Ну, это не делает , имеют к, но это делает. RSpec работает довольно быстро за мной в соответствии с моими маленькими проектами ненаправляющих.

5
задан Jay 26 September 2009 в 07:26
поделиться

3 ответа

Или просто так:

def title
  output.data.title rescue nil
end
4
ответ дан 14 December 2019 в 01:12
поделиться
def try_chain
  yield
rescue NoMethodError
  nil
end

def title
  try_chain { output.data.title }
end
1
ответ дан 14 December 2019 в 01:12
поделиться

Thoughtbot только что рассказал об этом в своем блоге , используя то, что они называют мелким нулем:

def swallow_nil
  yield
rescue NoMethodError
  nil
end

Итак, в их примере они могли сделать что-то вроде:

campaign = swallow_nil { supporter.politician.campaign }

Или, в вашем случае,

def title
  swallow_nil { output.data.title }
end

Однако имейте в виду, что любые ваши ошибки также будут проглочены и их будет трудно найти, особенно потому, что они перехватывают все NoMethodErrors, которые могут быть вызваны другими частями ваш код (хотя, если вы используете тестирование, это очень помогает).

Другой подход - использовать andand , тогда ваш код будет

def title
  output.andand.data.andand.title
end

Не таким чистым, как swallow_nil, но, вероятно, лучше всего не просто игнорировать все.

1
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: