如何解决您可以在Ruby的代码块中产生代码吗?
我目前正在学习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
,总是仅救援 您要处理的那些异常。 )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。