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

Arthred

我目前正在学习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总是准确地挽救那些您想处理的异常。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

您可以将代码附加到Objective-C块变量吗?

来自分类Dev

静态代码块可以引发异常吗?

来自分类Dev

可以缩短此代码块吗?

来自分类Dev

在 Kotlin 中产生异常的最短代码?

来自分类Dev

您可以在推送代码时切换分支吗?

来自分类Dev

您可以对代码段表进行排序吗?

来自分类Dev

您可以在Joomla中显示python网络代码吗?

来自分类Dev

您可以检测到无法编译的代码吗?

来自分类Dev

您可以自定义代码折叠吗?

来自分类Dev

您可以将Stripe Java代码转换为CFscript吗

来自分类Dev

您可以在Google Colab中隐藏代码单元输出吗?

来自分类Dev

您可以在QML声明代码中捕获错误吗?

来自分类Dev

您可以不使用Deferred来编写此代码吗?

来自分类Dev

您可以更正html pogo-slider代码吗?

来自分类Dev

您可以从源代码构建apt-get吗?

来自分类Dev

您可以编写与插入值相同的 SQL DELETE 代码吗?

来自分类Dev

RVM,rbenv和Homebrew可以在运行的Ruby on Rails env中产生问题吗?

来自分类Dev

Ruby书中的代码块

来自分类Dev

Ruby书中的代码块

来自分类Dev

您可以在Google跟踪代码管理器中基于区域触发代码吗?

来自分类Dev

clang格式可以为我对齐#define的代码块吗?

来自分类Dev

我可以在Dreamweaver中突出显示代码块吗?

来自分类Dev

为什么while循环会在我的代码中产生错误?

来自分类Dev

有人可以解释一下这段Ruby代码吗,为什么在该代码块中变量为null?

来自分类Dev

Clojure Korma可以在Postgres中产生WITH-RETURNING查询吗?

来自分类Dev

Clojure Korma可以在Postgres中产生WITH-RETURNING查询吗?

来自分类Dev

Ruby代码块和Chef

来自分类Dev

Ruby gem可以快速验证部分HTML代码段吗?

来自分类Dev

Ruby gem可以快速验证部分HTML代码段吗?

Related 相关文章

  1. 1

    您可以将代码附加到Objective-C块变量吗?

  2. 2

    静态代码块可以引发异常吗?

  3. 3

    可以缩短此代码块吗?

  4. 4

    在 Kotlin 中产生异常的最短代码?

  5. 5

    您可以在推送代码时切换分支吗?

  6. 6

    您可以对代码段表进行排序吗?

  7. 7

    您可以在Joomla中显示python网络代码吗?

  8. 8

    您可以检测到无法编译的代码吗?

  9. 9

    您可以自定义代码折叠吗?

  10. 10

    您可以将Stripe Java代码转换为CFscript吗

  11. 11

    您可以在Google Colab中隐藏代码单元输出吗?

  12. 12

    您可以在QML声明代码中捕获错误吗?

  13. 13

    您可以不使用Deferred来编写此代码吗?

  14. 14

    您可以更正html pogo-slider代码吗?

  15. 15

    您可以从源代码构建apt-get吗?

  16. 16

    您可以编写与插入值相同的 SQL DELETE 代码吗?

  17. 17

    RVM,rbenv和Homebrew可以在运行的Ruby on Rails env中产生问题吗?

  18. 18

    Ruby书中的代码块

  19. 19

    Ruby书中的代码块

  20. 20

    您可以在Google跟踪代码管理器中基于区域触发代码吗?

  21. 21

    clang格式可以为我对齐#define的代码块吗?

  22. 22

    我可以在Dreamweaver中突出显示代码块吗?

  23. 23

    为什么while循环会在我的代码中产生错误?

  24. 24

    有人可以解释一下这段Ruby代码吗,为什么在该代码块中变量为null?

  25. 25

    Clojure Korma可以在Postgres中产生WITH-RETURNING查询吗?

  26. 26

    Clojure Korma可以在Postgres中产生WITH-RETURNING查询吗?

  27. 27

    Ruby代码块和Chef

  28. 28

    Ruby gem可以快速验证部分HTML代码段吗?

  29. 29

    Ruby gem可以快速验证部分HTML代码段吗?

热门标签

归档