使用Ruby中的匿名模块
发布时间:2020-12-17 03:34:00 所属栏目:百科 来源:网络整理
导读:假设我按如下方式制作模块: m = Module.new do class C endend 三个问题: 除了对m的引用之外,有没有办法可以访问m中的C和其他内容? 我可以在创建匿名模块后为其命名(就像我输入“模块……”)一样吗? 当我完成匿名模块时,如何删除它,以便它定义的常量不再
假设我按如下方式制作模块:
m = Module.new do class C end end 三个问题: >除了对m的引用之外,有没有办法可以访问m中的C和其他内容? 解决方法
三个答案:
>是的,使用ObjectSpace.此代码使c引用您的C类而不引用m: c = nil ObjectSpace.each_object { |obj| c = obj if (Class === obj and obj.name =~ /::C$/) } 当然这取决于程序中任何地方都没有其他名为C的类,但是你明白了.>是的,有点儿.如果你只是将它分配给一个常量,比如M = m,那么m.name将返回“M”而不是nil,并且像M :: C这样的引用将起作用.实际上,当我这样做并在irb中键入M :: C时,我得到#< Module:0x9ed509c> :: C,但也许这是一个错误.>我认为一旦没有引用它就应该进行垃圾收集,即当没有m或C的实例或子类型时,m被设置为不同的值或超出范围.如果您将其分配给常量,如上所述,则需要将其更改为不同的值(尽管通常不明智地更改常量). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |