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

问题描述 投票:-1回答:2

所以,对于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针对程序员的快乐进行了优化。我的问题是寻求我认为更干净的性感代码。不想要的是表达许多意见,这些意见对帮助实现答案毫无帮助。我是一名优秀的程序员,其遗留代码已经投入生产,服务数十亿,并且可能比大多数人年龄大。如果不回答问题,请停止铲除毫无意义的意见。到目前为止,它看起来并不像我所寻求的存在。没关系。

ruby exception hashrocket
2个回答
3
投票

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

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

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

我从来没有在任何实际的应用程序中使用任何全局变量,所以不确定你可能需要注意哪些类型的东西(例如,如果多个线程同时抛出不同的错误*可能是一个问题)。


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.