Tengo el siguiente código:
ejemplo_código.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.barEl ejemplo anterior funciona cuando lo pegas en irb, pero cuando lo colocas en un script y lo ejecutas así:
ruby ./sample_code.rbDará el siguiente error.
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) ¿Es esto un problema de tiempo de espera? ¿ irb carga algunos módulos que el comando ruby normal no carga? ¿Cómo hacer que el código funcione cuando se ejecuta como un script?
La explicación más probable es que IRB requiere tiempo de espera cuando inicia REPL, pero su archivo de script se ejecuta antes de que eso suceda. Puede solucionarlo simplemente solicitándolo:
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