¿Cómo creo dinámicamente una variable local en Ruby?

Estoy tratando de crear dinámicamente variables locales en Ruby usando eval y mutar la matriz de variables locales. Estoy haciendo esto en IRB.

 eval "t = 2" local_variables # => [:_] eval "t" # => NameError: undefined local variable or method `t' for main:Object local_variables < [:_, :t] t # => NameError: undefined local variable or method `t' for main:Object 

Tienes que usar el enlace correcto. En IRB, por ejemplo, esto funcionaría:

 irb(main):001:0> eval "t=2", IRB.conf[:MAIN_CONTEXT].workspace.binding => 2 irb(main):002:0> local_variables => [:t, :_] irb(main):003:0> eval "t" => 2 irb(main):004:0> t => 2 

Tienes que sincronizar las evaluaciones con el mismo objeto de enlace. De lo contrario, una sola evaluación tiene su propio scope.

 b = binding eval("t = 2", b) eval("local_variables", b) #=> [:t, :b, :_] eval("t", b) # => 2 b.eval('t') # => 2 

Podrías establecer variables de instancia como esta:

 instance_variable_set(:@a, 2) @a #=> 2