【问题标题】:way to remove global variable in Ruby?在Ruby中删除全局变量的方法?
【发布时间】:2011-12-27 11:49:52
【问题描述】:

我知道我可以通过 Kernel#global_variables 查看所有全局变量,但是有没有类似于 remove_instance_variable、remove_class_variable、remove_const 方法的方法来删除它们?或者有没有办法用它们来完成同样的事情?

【问题讨论】:

  • 我不这么认为。 (你为什么想要?)
  • 您可以为其分配一个nil 值。但是,像 cmets 一样,为什么要定义和删除全局变量?应该避免使用全局变量,因为它们可以在代码中的任何地方被覆盖。如果必须使用它们,请极其谨慎地使用它们。
  • 由于 gc 延迟 ObjectSpace#define_finalizer 可能无法立即知道何时对象不再被变量引用。 Kernel#trace_var,唯一在变量更改时触发的回调,仅适用于全局变量
  • 有时使用 setter 函数是不切实际或不可能的,原因有很多

标签: ruby global-variables


【解决方案1】:

我不相信可以“取消设置”全局变量。最好的办法是将变量设置为 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 应该具有与“取消设置”它所期望的完全相同的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2014-10-31
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多