- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
Programming Ruby 1.9 & 2.0 一书中给出了以下示例:
require 'irb'
trap "INT" do
IRB.start
end
count = 0
loop do
count += 1
puts count
puts "Value = #{@value}" if defined? @value
sleep 1
end
不幸的是,如果我使用我的 Ruby 2.5.1 设置运行此代码,我会得到以下 ThreadError
(run_irb.rb 是包含上述代码的文件的名称):
24: from run_irb.rb:8:in `<main>'
23: from run_irb.rb:8:in `loop'
22: from run_irb.rb:12:in `block in <main>'
21: from run_irb.rb:12:in `sleep'
20: from run_irb.rb:4:in `block in <main>'
19: from /usr/lib/ruby/2.5.0/irb.rb:376:in `start'
18: from /usr/lib/ruby/2.5.0/irb/init.rb:17:in `setup'
17: from /usr/lib/ruby/2.5.0/irb/init.rb:112:in `init_config'
16: from /usr/lib/ruby/2.5.0/irb/init.rb:112:in `new'
15: from /usr/lib/ruby/2.5.0/irb/locale.rb:32:in `initialize'
14: from /usr/lib/ruby/2.5.0/irb/locale.rb:108:in `load'
13: from /usr/lib/ruby/2.5.0/irb/locale.rb:124:in `find'
12: from /usr/lib/ruby/2.5.0/irb/locale.rb:145:in `search_file'
11: from /usr/lib/ruby/2.5.0/irb/locale.rb:157:in `each_localized_path'
10: from /usr/lib/ruby/2.5.0/irb/locale.rb:167:in `each_sublocale'
9: from /usr/lib/ruby/2.5.0/irb/locale.rb:158:in `block in each_localized_path'
8: from /usr/lib/ruby/2.5.0/irb/locale.rb:150:in `block in search_file'
7: from /usr/lib/ruby/2.5.0/rubygems.rb:213:in `try_activate'
6: from /usr/lib/ruby/2.5.0/rubygems/specification.rb:1063:in `find_by_path'
5: from /usr/lib/ruby/2.5.0/rubygems/specification.rb:1063:in `find'
4: from /usr/lib/ruby/2.5.0/rubygems/specification.rb:1063:in `each'
3: from /usr/lib/ruby/2.5.0/rubygems/specification.rb:1064:in `block in find_by_path'
2: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:40:in `require'
1: from /usr/lib/ruby/2.5.0/monitor.rb:185:in `mon_enter'
/usr/lib/ruby/2.5.0/monitor.rb:185:in `lock': can't be called from trap context (ThreadError)
在 Ruby 2.5.1 中有没有办法让 irb 从陷阱上下文中运行?
最佳答案
Ruby 2.0 does not allow Mutex#lock within a signal handler
根据这个bug 7917在 ruby lang 中,这是“预期的”行为。所以你基本上发现了一个语言错误和一个书籍错误,因为作者没有在 ruby 2.0 中测试这个例子(确认它在 1.9 中工作。)
另一种方法是使用异常/救援并从中断中执行 IRB
session ,如下所示:
require 'irb'
count = 0
loop do
count += 1
puts count
puts "Value = #{@value}" if defined? @value
sleep 1
rescue Interrupt => e
IRB.start
break
end
以上代码将正确捕获中断并允许启动 IRB
session 。我确实注意到 IRB.start
不会给你一个本地执行上下文,所以你可能想看看 binding.irb
让你开始一个更有用的调试 session 像这样:
$ ruby thread-test.rb
1
2
^C
[1] irb(main)>
From: /work/_scratch/thread-test/thread-test.rb @ line 11 :
6: puts count
7: puts "Value = #{@value}" if defined? @value
8: sleep 1
9: rescue Interrupt => e
10: binding.irb
=> 11: break
12: end
[2] irb(main)> e
=> Interrupt
[3] irb(main)> count
=> 2
我找到了一些关于处理 Signals, Traps, and Rescues 的博文和 Graceful Shutdown这可能会帮助您进一步解决问题。
关于Ruby:从陷阱上下文运行 irb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53399991/
我正在尝试将文件加载到 IRB 中。我在桌面上保存了名为“Ruby.rb”的文件 如何将文件加载到 IRB? 我尝试过使用“加载“Ruby.rb”、“加载“Ruby””和“需要“Ruby.rb”。这些
当我们使用 Binding.irb 时,我该如何...使用 IRB 调试时跳到下一行? 或者每次我想暂停执行以进行调试时,我是否只放置大量的 binding.irb 行? 最佳答案 你不能。 IRB
当我们使用 Binding.irb 时,我该如何...使用 IRB 调试时跳到下一行? 或者每次我想暂停执行以进行调试时,我是否只放置大量的 binding.irb 行? 最佳答案 你不能。 IRB
我刚刚安装了 Ruboto-irb在我的 Android 设备上运行 Ruby IRB。 文档位于 https://github.com/ruboto/ruboto/wiki/Using-Ruboto
我今天刚刚安装了 rvm,它看起来非常方便/强大。 我想我已经掌握了窍门,但是...... 当使用安装了 rvm 的 ruby 并运行 irb 时,当我需要安装的 gem 时,比如“rvm”,我得
找了一圈,反正找不到用fzf在 irb 或 pry 控制台中搜索历史记录。有什么办法可以做到吗? 最佳答案 环顾四周后,我发现命令完成与 GNU Readline 相关联。 ,然后我发现了Readli
在我运行 irb 的每个目录中,我都有一个需要的 config/boot.rb 文件。如果这可以在我输入 irb 时自动加载,那就太好了,但我不确定如何从 .irbc 文件中引用我打开 irb 的目录
我知道这个命令是:需要文件名 但我猜这个命令是针对 ruby 1.9.4 而我使用的是 ruby 2.0.0 确切的消息是。 $require start.rb LoadError: can
当我运行 Rails 应用程序时,它会正确找到我安装的所有 gem。 这是我第一次尝试从 irb 内部调用一些 gem,但找不到它们。 blocke:~$ irb irb(main):001:0> r
我发现 IRB 作为试错式调试工具非常有用,我真的不知道问题出在哪里,但可以利用 IRB 的 REPL 特性快速迭代潜在列表重现问题并将其提炼出来的方法。 有时我决定重新打开属于已加载 gem 的类,
我在 ruby-doc 中找不到任何相关内容。 我可以在 IRB 中拥有这样的东西: 2.2.0 :012"> 或 2.2.0 :012?> 我不知道那些符号是什么意思。你知道 吗? 是警告我错过
我想知道如何着手创建在浏览器中运行的在线 IRB。我有一个想法,在我的博客中包含一个 irb 控制台,并为用户提供将我教程中的代码块直接发送到 irb 控制台的选项,以便他们可以使用它。 _为什么以前
我有这个脚本,它在执行时让用户进入 IRB session 。 很好,但是当我使用 *nix 管道获取输入时(例如使用 cat),IRB session 立即结束。 我可以将脚本(我们称之为 mysc
我正在运行带有 rbenv 的 Ruby 1.9.2。我最近将我的用户目录移动到另一个驱动器。 Ruby 和 irb 使用 which 出现。 $ which ruby /Volumes/Pig/Us
我正在摆弄各种小型硬件。试图学习它。我想运行 mruby。我已经为我的硬件编译了。并拥有框架以及包括 MIRB 和 MRUBY bins。 但我可能会喜欢我自己的 IRB 代码。我的职业是程序员,但自
当我在 irb 中输入以下行时,irb 终止。 $ irb irb(main):001:0> def !; end => :! irb(main):002:0> ! /usr/local/lib/ru
当我在 irb 中输入包含土耳其语字符的我的名字作为字符串输入时,irb 会打印到终端,就好像存在编码不匹配一样。但是,如果通过 puts 或 print 将字符串打印到控制台,则输出正是我所期望的。
Programming Ruby 1.9 & 2.0 一书中给出了以下示例: require 'irb' trap "INT" do IRB.start end count = 0 loop do
我正在与 IRB(实际上是 Wirble)一起练习。我想知道是否可以将 IRB 内部的任何黑客攻击转储到文件中以供以后比较、编辑和重用? 您可以随时创建类、方法和数据,并且交互式 session 会不
我刚刚更新了我的 ruby 版本,现在当我在命令行中运行 irb 时,我得到了这个奇怪的东西: 1.9.2p290 :001 > 每一行。之前是一个简单的> 我怎样才能把它取回来? 最佳答案 您可
我是一名优秀的程序员,十分优秀!