Ruby异常hashrocket;是否有另一种json风格的方式来捕捉异常?

时间:2017-12-31 03:06:58

标签: ruby exception hashrocket

因此,对于Ruby中的哈希,你可以使用像这样的hashrockets:

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

或更简洁的json-ish风格。

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

是否有json-ish风格的方式来捕获Ruby异常?通常的方法是:

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

我开始讨厌在我的代码中看到hashrockets,即使是这样。有人请教育我。

编辑: 出于某种原因,这引起了那些具有代码 - 宗教傲慢居高临下的判断力的人的评论。这是一个问题论坛,如果你不喜欢这个问题,请关闭你的窗口。 Ruby针对程序员的快乐进行了优化。我的问题是寻求我认为更干净的性感代码。不想要的是表达许多意见,这些意见对帮助实现答案毫无帮助。我是一名优秀的程序员,其遗留代码已经投入生产,服务数十亿,并且可能比大多数人年龄大。如果不回答问题,请停止铲除毫无意义的意见。到目前为止,它看起来并不像我所寻求的存在。没关系。

2 个答案:

答案 0 :(得分:3)

如果你绝对想要摆脱它,你可以回到Ruby's Global Variables的一些,特别是

  

$!
  由'设置的例外信息消息   $ @
  抛出的最后一个异常的回溯数组。

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

我从未在任何实际应用程序中使用任何全局变量,因此不确定您可能需要注意哪些类型的事物(如果多个线程同时抛出不同的错误*可能是个问题,例如)。

答案 1 :(得分:2)

不,AFAIK这是创建对捕获的异常的引用所需的语法。

相关问题