【问题标题】:multiple assignment in rescue clause?救援条款中的多重赋值?
【发布时间】:2013-12-27 14:48:06
【问题描述】:

我遇到了这个示例代码作为 Ruby 中异常处理的习惯用法:

begin
  eval string
rescue SyntaxError, NameError => boom
  print "String doesn't compile: " + boom
rescue StandardError => bang
  print "Error running script: " + bang
end

我对局部变量赋值行感到特别困惑,但有多个例外: rescue SyntaxError, NameError => boom。这是否意味着本地变量boom 将采用SyntaxErrorNameError 对象?还是只是分配的NameError

这更令人困惑,因为代码本身会抛出 TypeError,我想可能是因为 string 未定义,但这可能不是重点。

【问题讨论】:

    标签: ruby exception-handling variable-assignment


    【解决方案1】:

    我在http://phrogz.net/programmingruby/tut_exceptions.html 找到了上面的代码。那是你的来源吗?

    在任何情况下,该代码中的局部变量都会分配给引发错误的任何一个;它只是在最后一个之后指定。

    是的,它正在抛出TypeError,因为错误不会隐式地强制转换为当今 Ruby 中的字符串。也许他们习惯了这本书最初出版的时候。您需要在局部变量引用中添加.message 以获取错误消息(例如+ boom.message)。

    【讨论】:

    • 是的,这是我的来源,但来自实体书。作为电子书提供的版本尚未针对 Ruby 2.0 进行更新(我认为)。谢谢你帮我解决这个问题,彼得!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多