【发布时间】:2021-02-14 09:57:25
【问题描述】:
我目前正在学习 Ruby,并通过阅读畅销书“The well-grounded 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 的内部工作原理。)
【问题讨论】:
标签: ruby iterator rubygems ruby-on-rails-5 iteration