1

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

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

或更简洁的 json 风格。

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

是否有一种 json 风格的方式来捕获 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 针对程序员的快乐进行了优化。我的问题是寻找我认为更干净、更性感的代码。不想要的是表达许多无助于帮助实现答案的意见。我是一名优秀的程序员,拥有已在生产中为数十亿用户提供服务的遗留代码,并且可能比你们大多数人都老。如果它不能回答问题,请停止铲除毫无意义的意见。到目前为止,它看起来不像我正在寻找的存在。没关系。

4

2 回答 2

3

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

美元!
'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

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

于 2017-12-31T17:52:49.060 回答
2

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

于 2017-12-31T03:50:53.937 回答