现在在看双飞燕的中文版,里面讲到控制结构:Throw 和 Catch。catch 的对象可以是 Symbol 或者字符串。对于下面的代码,使用 Symbol 能够正常返回 1,但是如果将:hello
替换成"hello"
却会报错:ArgumentError: uncaught throw "hello"。请大家指导下,谢谢。
另外有些疑惑:在 ruby 的 api 中,对于 catch([arg]) {|tag| block }中的 arg 是这样描述的:arg can be an arbitrary object, not only Symbol.
,任意的对象,不限 Symbol,这样说是指双飞燕的中文翻译有误么?
代码:
a = ('a'..'c').to_a
def test(a)
for ele in a do
throw :hello,1 if ele == 'b'
end
end
catch(:hello){ test(a) }