gpt4 book ai didi

ruby - 在 Ruby 中使用匿名模块

转载 作者:数据小太阳 更新时间:2023-10-29 07:14:01 25 4
gpt4 key购买 nike

假设我做了一个模块如下:

m = Module.new do
class C
end
end

三个问题:

  • 除了对 m 的引用之外,还有什么方法可以访问 Cm 中的其他内容?

  • 我可以在创建匿名模块后为其命名吗(就像我输入“module ...”一样)?

  • 如何在使用完匿名模块后将其删除,使其定义的常量不再存在?

最佳答案

三个答案:

  • 是的,使用 ObjectSpace .此代码使 c引用你的类(class)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 的引用将工作。实际上,当我这样做并输入 M::C在 irb 中,我得到 #<Module:0x9ed509c>::C ,但也许这是一个错误。

  • 我认为一旦没有对它的引用,即当没有 m 的实例或子类型时,它应该被垃圾收集。或 C , 和 m设置为不同的值或超出范围。如果你像上面那样将它分配给一个常量,你也需要将它更改为一个不同的值(尽管更改常量通常是不明智的)。

关于ruby - 在 Ruby 中使用匿名模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2883337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com