rescue 它可以分配一个变量来引用错误对象有这样的语法(=>)

rescue => e

如果 rescue 是一般方法调用的一个,是什么意思 =>.我可以在其他方法调用上使用相同的语法吗?

my_method arg1, arg2 => my_obj
有帮助吗?

解决方案

raise 确实是一种方法, rescue 不是。它是一个关键字,定义在 解析。y:10467.因此,您拥有的语法是特殊的 rescue (自 => e 不是什么类型的吗? 方法 参数),并且对于方法本身无效(至少不具有相同的含义)。如何/在哪里 rescue => e 语法本身是在解析器中定义的,我不完全确定。

其他提示

正如一些足球教练/哲学家国王可能会说的那样,它就是它。这是鲁比的 解析。y.特别感兴趣的是 这部分:

opt_rescue      : keyword_rescue exc_list exc_var then
                  compstmt
                  opt_rescue
                    ...
                | none
                ;

exc_list        : arg_value
                    ...
                | mrhs
                    ...
                | none
                ;

exc_var         : tASSOC lhs
                    ...
                | none
                ;

解释说明
exc_list 基本上什么都不允许,一个异常类型,或(splatted)一系列异常,如 rescue ZeroDivisionError, LoadError

exc_var 可以是什么都没有或 => some_variable

opt_rescue 因此可以是 rescue 本身或加上上述任一或两者。

它是 只有 这里列出的是异常赋值的特殊语法。唯一的其他用途 => 是为了 键值关联.

另请注意 arg_valuemrhs 在左手边, lhs 是在右边,这是我能告诉唯一发生这种情况的地方。有人纠正我,如果我在这里错了,但在parse中没有任何其他"向后"分配。y.

不,救援中的语法只在那里使用。如果你在像那样的函数调用中使用散列函数'=>',它将被解释为散列,如果arg2之前没有被定义为变量,它将是一个错误。

def foo(a,b)
  puts b.inspect
end

foo "bar", :baz => 5   #=> {:baz=>5}

foo "bar", baz => 5    #=> NameError: undefined local variable or method `baz'

baz = "flux"

foo "bar", baz => 5   #=> {"flux"=>5}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top