在大多数其他语言中,catch和throw语句执行begin,rescue和raise语句在Ruby中执行的操作.我知道你可以用这两个陈述来做到这一点:
catch :done do
puts "I'm done."
end
Run Code Online (Sandbox Code Playgroud)
和
if some_condition
throw :done
end
Run Code Online (Sandbox Code Playgroud)
但这有用的是什么?有人可以给我一个Ruby中使用catch和throw语句的例子吗?
我知道这可能并不重要,但我想知道什么是正确的.
如果一段代码包含某些版本的throw new SomeKindOfException().我们是否说这段代码可能引发异常?或抛出异常?
关键字是throw,所以我倾向于那个,但提出异常也被大量使用...
他们有某种不同的含义吗?他们中的一个是否与另一个有所不同?或者它只是两个词意味着完全相同的东西?
catch在Ruby中意味着跳出深层嵌套的代码.在Java中,例如可以用Java try-catch来处理异常,但它被认为是不好的解决方案,而且效率也非常低.在Ruby中我们处理异常begin-raise-rescue,我认为将它用于其他任务也很昂贵.
Ruby是否catch-throw真的是一个更有效的解决方案,begin-raise-rescue还是有任何其他理由使用它来打破嵌套块而不是begin-raise-rescue?
我不明白为什么这段代码不能正常工作:
def test
raise Exception.new 'error'
end
def caller
begin
test
rescue =>e
puts e.message
end
end
caller
Run Code Online (Sandbox Code Playgroud)
我想在caller方法中捕获测试异常,但似乎该caller方法没有捕获任何东西.