为什么简单Ruby代码在irb中运行正常,命令行执行却报错?
问题定位
- 该报错属于
Timeout模块加载相关问题,报错uninitialized constant Foo::Timeout的本质是脚本执行环境中没有加载timeout标准库,无法识别Timeout常量。 - IRB确实默认预加载了部分普通
ruby命令执行脚本时不会默认加载的标准库,timeout就是其中之一,所以同一段代码粘贴到IRB可以正常运行,作为独立脚本执行就会触发未初始化常量报错。
修复方案
在脚本文件的首行添加timeout库的显式引入语句即可,修改后的完整代码如下:
require 'timeout' class Foo def bar Timeout.timeout(0.5){ puts "Interupt this if it takes longer then 0.5 seconds" } end end foo = Foo.new() foo.bar
修改后再执行ruby ./sample_code.rb即可正常运行。
内容的提问来源于stack exchange,提问作者Paul Verschoor
相关产品推荐
相关产品推荐

