摧毁一个阶级意味着什么

时间:2013-11-23 06:34:21

标签: ruby class

有人使用了“摧毁一个类”的短语,我怀疑这意味着什么,并决定进行搜索,看起来像破坏类似乎是一个真实的概念,如How to properly destroy a class所示

摧毁一个班级意味着什么? 我如何在Ruby中销毁一个类? (如果这有意义的话)

2 个答案:

答案 0 :(得分:3)

相当于毁灭,你可以remove the constant。记住class(s)只不过是常数。

class C;end
C.name # => "C"

self.class.send(:remove_const,:C) 
C.name # uninitialized constant C (NameError)

执行class C;end时,表示您正在创建Class实例(常量赋值)并将该实例分配给常量C。实际执行取消分配的#remove_const方法,并返回Class实例,您可以将其分配给另一个常量。

class C
  def self.foo
    12
  end
end

C.foo # => 12
M = self.class.send(:remove_const,:C) 
M.foo # => 12
C.foo # uninitialized constant C (NameError)

答案 1 :(得分:1)

要学习的最重要的规则是,在Ruby中,销毁类与销毁任何其他对象没有什么不同。通常,您有一些固定类分配给常量,永远不会被销毁。创建参数化子类(同样是类Class)是一个很好但却相当不充分的实践,它可能在程序执行期间被破坏,就像任何其他对象一样。破坏本身由垃圾收集器执行,这通常与程序员无关。

注意:您链接的文章不是讨论破坏类,而是讨论实例化和销毁实例。