Итак, для хешей в Ruby вы можете использовать такие хеш-рокеты:

corned_beef = {
    :ingredient1 => "beef",
    :ingredient2 => "potatoes"
}

Или более лаконичный стиль json-ish.

corned_beef = {
    ingredient1: "beef",
    ingredient2: "potatoes"
}

Есть ли способ перехвата исключений Ruby в стиле json? Обычный способ таков:

begin
    # ...blah blah...
rescue ActiveRecord::RecordNotFound => e
    logger.debug { "Where's da beef?" }
rescue => e
    logger.debug { "#{e.message}\nBacktrace Begin:\n #
        {e.backtrace.join("\n")}" }
else
    # ...blah blah...
end

Я начал ненавидеть видеть в моем коде хэш-ракеты даже для этого. Кто-нибудь, пожалуйста, обучил меня.

РЕДАКТИРОВАТЬ: По какой-то причине это привлекло комментарии от людей, у которых есть религиозно-религиозное высокомерное снисходительное суждение. Это форум для вопросов, если вам не нравится вопрос, закройте окно. Ruby был оптимизирован для счастья программистов. Мой вопрос заключается в поиске того, что я считаю более сексуальным кодом. Чего не хотят, так это выражения множества мнений, которые никак не помогают получить ответ. Я хороший программист с унаследованным кодом, который использовался в продакшене и обслуживает миллиарды людей и, вероятно, старше большинства из вас. Пожалуйста, прекратите лопатить бессмысленные мнения, если он не отвечает на вопрос. Пока не похоже, что то, что я ищу, существует. Это хорошо.

-1
Michael K Madison 31 Дек 2017 в 06:06

2 ответа

Лучший ответ

Если вы абсолютно хотите избавиться от него, вы можете вернуться к Глобальные переменные Ruby, в частности

$!
Информационное сообщение об исключении, установленное с помощью "raise".
$ @
Массив следа последнего сгенерированного исключения.

begin
  raise ArgumentError, 'Your argument is invalid'
rescue ArgumentError
  puts "#{$!.message}\nBacktrace Begin:\n#{$@.join("\n")}"
  # or
  puts "#{$!.message}\nBacktrace Begin:\n#{$!.backtrace.join("\n")}"
end

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

3
Simple Lime 31 Дек 2017 в 17:52

Нет, AFAIK это синтаксис, необходимый для создания ссылки на перехваченное исключение.

2
Keith Bennett 31 Дек 2017 в 03:50