Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中,你能在代码块内部生成代码吗?_Ruby_Iterator_Rubygems_Ruby On Rails 5_Iteration - Fatal编程技术网

在Ruby中,你能在代码块内部生成代码吗?

在Ruby中,你能在代码块内部生成代码吗?,ruby,iterator,rubygems,ruby-on-rails-5,iteration,Ruby,Iterator,Rubygems,Ruby On Rails 5,Iteration,我目前正在学习Ruby,并通过阅读畅销书《基础扎实的Rubyist》来学习Ruby。我确实非常理解代码块,或者我是这么想的,直到我在191页的书中找到了这个代码示例: open_user_file do |filename| fh = File.open(filename) yield fh fh.close rescue puts "Couldn't open your file" end 现在我不太明白的是,在代码块内屈服时,我应该向谁

我目前正在学习Ruby,并通过阅读畅销书《基础扎实的Rubyist》来学习Ruby。我确实非常理解代码块,或者我是这么想的,直到我在191页的书中找到了这个代码示例:

open_user_file do |filename|
   fh = File.open(filename)
   yield fh
   fh.close
   rescue
     puts "Couldn't open your file"
end
现在我不太明白的是,在代码块内屈服时,我应该向谁屈服?我的理解是,如果您调用一个可以产生的方法,并且提供了一个代码块,那么该方法将产生您的代码块(甚至可能带有参数),您的代码块将执行,然后将控制权交还给该方法。但是在这个代码示例中,我们不在方法中屈服,而是在代码块中屈服。有人能给我解释一下这是如何工作的,以及像这样的结构是什么样子的吗?任何澄清都将不胜感激


(注意,请不要告诉我“你不应该这样做”。我不是在问,因为我想在生产代码中这样做,我只是想深入了解Ruby的内部工作原理。)

你那里的代码实际上不起作用,因为没有块可以
产生


您将得到一个
LocalJumpError
,它被catch-all
rescue
吞没,因此看起来文件有问题,而实际上是编程错误。(可教的时刻:永远不要做一刀切的营救,总是只营救那些你想处理的异常。)

你的代码事实上不起作用,因为没有阻碍
屈服于


您将得到一个
LocalJumpError
,它被catch-all
rescue
吞没,因此看起来文件有问题,而实际上是编程错误。(可教的时刻:永远不要做“一网打尽”的营救,总是只营救那些你想处理的例外情况。)

谢谢!:)是的,这就解释了,我想这本书可能有一个错误,但我真的想确保这不是我忽略了什么。如果这段代码在一个方法中,那当然是完全不同的事情。显然,您可以在方法内部
yield
,不管
yield
是否嵌套在块中。谢谢!)是的,这就解释了,我想这本书可能有一个错误,但我真的想确保这不是我忽略了什么。如果这段代码在一个方法中,那当然是完全不同的事情。显然,您可以在方法内部
yield
,不管
yield
是否嵌套在块中。