为什么这个简单的ruby代码在命令行中不起作用,但在irb中粘贴时却起作用



我有以下代码:

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

相关内容

  • 没有找到相关文章

最新更新