在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”方法删除常量