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