微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您可以在Ruby的代码块中产生代码吗?

如何解决您可以在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 举报,一经查实,本站将立刻删除。