在Ruby中未定义variables

假设我正在使用irb ,并键入a = 5 。 如何删除a的定义,以便键入a返回一个NameError

一些背景:后来我想这样做:

 context = Proc.new{}.binding context.eval 'a = 5' context.eval 'undef a' # though this doesn't work. 

有remove_class_variable , remove_instance_variable和remove_const方法,但是目前没有对于局部variables的等价物。

您可以通过减lessvariables的存在范围来避免取消声明variables:

 def scope yield end scope do b = 1234 end b # undefined local variable or method `b' for main:Object 

你可以通过调用一个irb子shell来“清除”irb的局部variablesregistry。 想想Bash shell如何对未导出的环境variables进行工作。 既然你提到了交互模式,这个解决scheme应该为此工作。

就生产代码而言,我不想将局部variables定义为解决scheme的一部分 – 对于这种types的场景,键控哈希可能会更好。

这是我的意思:

 $ irb irb(main):001:0> a = "a" => "a" irb(main):002:0> defined? a => "local-variable" irb(main):003:0> irb # step into subshell with its own locals irb#1(main):001:0> defined? a => nil irb#1(main):002:0> a NameError: undefined local variable or method `a' for main:Object from /Users/dean/.irbrc:108:in `method_missing' from (irb#1):2 irb#1(main):003:0> exit => #<IRB::Irb: @context=#<IRB::Context:0x1011b48b8>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x1011b3df0>> irb(main):004:0> a # now we're back and a exists again => "a" 

目前你无意删除全局variables,局部variables和类variables。 虽然可以使用“remove_const”方法删除常量