我有以下代码:
sample_code.rb
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
当你把它粘贴到irb中时,上面的例子就起作用了,但当你把它放在脚本中并像这样运行时:
ruby ./sample_code.rb
它将给出以下错误。
Traceback (most recent call last):
1: from ./irb_works_ruby_dont.rb:11:in `<main>'
./irb_works_ruby_dont.rb:4:in `bar': uninitialized constant Foo::Timeout (NameError)
这是超时问题吗?irb
是否加载了一些正常ruby
命令没有加载的模块?如何使代码在作为脚本运行时正常工作?
最可能的解释是,IRB在启动REPL时需要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