你能在Ruby中的代码块内部屈服吗



我目前正在学习Ruby,并通过阅读流行的书"有良好基础的鲁比斯特";。我确实相当理解代码块,或者我是这么想的,直到我在191页的书中看到了这个代码示例:

open_user_file do |filename|
fh = File.open(filename)
yield fh
fh.close
rescue
puts "Couldn't open your file"
end

现在我不太明白的是,当在代码块内让步时,我应该向谁让步?我的理解是,如果你调用一个可以屈服的方法,并且你提供了一个代码块,这个方法就会屈服于你的代码块(甚至可能有参数(,你的代码框就会执行,然后把控制权交还给这个方法。但在这个代码示例中,我们不是在方法中屈服,而是在代码块中屈服。有人能向我解释一下这是如何工作的,以及像这样的结构可能是什么样子的吗?如有任何澄清,不胜感激!

(附言:请不要告诉我"你不应该这样做"。我之所以这么问,并不是因为我想在生产代码中这样做,我只是想深入了解Ruby的内部工作原理。(

那里的代码实际上不起作用,因为没有yield到.的块

您将得到一个LocalJumpError,它被catch-allrescue吞噬,因此它看起来像是文件有问题,而实际上存在编程错误。(可撕裂的时刻:永远不要做一个毯子捕获所有rescue总是只拯救正是你想要处理的那些异常。(

相关内容

  • 没有找到相关文章

最新更新