为什么这个简单的 ruby 代码在命令行中不起作用,但在将其粘贴到 irb 中时却起作用
Why this simple ruby code does not work in the commandline, but does when pasting it in 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 时需要超时 - 但您的脚本文件在此之前正在执行。您可以通过简单地要求它来修复它:
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
我有以下代码:
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 时需要超时 - 但您的脚本文件在此之前正在执行。您可以通过简单地要求它来修复它:
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