我目前正在学习Ruby,并通过阅读畅销书“有充分基础的Rubyist”来学习。我确实相当了解代码块,或者我想,直到我从第191页的书中找到以下代码示例:
open_user_file do |filename|
fh = File.open(filename)
yield fh
fh.close
rescue
puts "Couldn't open your file"
end
现在,我不太了解的是,在代码块中屈服时该屈服于谁?据我了解,如果您调用一个可以屈服的方法并提供了一个代码块,则该方法将屈服于您的代码块(甚至带有参数),您的代码块将执行,然后将控制权交还给该方法。但是在此代码示例中,我们不在方法中屈服,而是在代码块中屈服。有人可以向我解释这是如何工作的,以及这样的结构如何?任何澄清表示赞赏!
(PS请不要告诉我“您不应该这样做”。我并不是问,因为我想在生产代码中这样做,我只想深入了解Ruby的内部工作原理。)
实际上,您所拥有的代码无法正常工作,因为没有任何障碍yield
。
您将得到一个LocalJumpError
,它被包罗万象,吞并了所有内容rescue
,因此看起来文件有问题,而实际上却存在编程错误。(可教的时刻:永远不要做一个全面的总结rescue
,总是只准确地挽救那些您想处理的异常。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句