如何在Ruby中删除全局变量?

3

我知道可以通过Kernel#global_variables查看所有全局变量,但是否有类似于remove_instance_variable、remove_class_variable、remove_const方法的方法可以删除它们?或者是否有一种使用这些方法来完成相同任务的方法?


我不这么认为。(你为什么想要这样做呢?) - Dave Newton
你可以将nil值赋给它。但是,就像注释一样,为什么要定义和删除全局变量呢?应该避免使用全局变量,因为它们可以从代码的任何地方进行覆盖。如果必须使用它们,请非常谨慎地使用。 - abhinav
由于垃圾回收延迟,ObjectSpace#define_finalizer可能无法立即知道变量不再引用对象。Kernel#trace_var是唯一在变量更改时触发的回调,但仅适用于全局变量。 - user10795
有时候由于各种原因,使用setter函数并不切实际或不可行。 - user10795
1个回答

0

我不相信可以“取消设置”全局变量。你最好将变量设置为nil

通常情况下,当你尝试使用未定义的变量时,Ruby会抛出一个错误。

irb > "The following variable has not yet been defined: #{a}"
irb > NameError: undefined local variable or method `a' for main:Object

该行为与全局变量实际上是不同的。任何尝试调用未定义的全局变量都将返回nil
irb > "The following global variable has not yet been defined: #{$a}"
  # => The following global variable has not yet been defined: 
irb > $a.class
  # => NilClass

因此,将全局变量设置为nil应该具有与“取消设置”相同的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接