gpt4 book ai didi

ruby - 如何从对象中动态获取嵌套模块?

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:46 26 4
gpt4 key购买 nike

给出:

module A
class B
end
end

b = A::B.new

我们希望能够将模块嵌套为一个数组。如果事先知道类,则可以这样做。例如:

module A
class B
def get_nesting
Module.nesting # => [A::B, A]
end
end
end

但是,如何为任意对象执行此操作,以便我们可以执行如下操作:

module Nester
def get_nesting
Module.nesting
end
end

b.get_nesting

如果我们尝试上面的方法,我们会得到一个空数组。

最佳答案

你在找这样的东西吗?

module D
A = 10
class E
module F
end
end
end

def all_nestings(top)
result = []
workspace = [top]
while !workspace.empty?
item = workspace.shift
result << item
item.constants.each do |const|
const = item.const_get(const)
next unless const.class == Class || const.class == Module
workspace.push const
end
end
result
end

puts all_nestings(D).inspect # => [D, D::E, D::E::F]

关于ruby - 如何从对象中动态获取嵌套模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598484/

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