Ruby 如何访问模块定义外部的Module.nesting返回
使用Module.nesting方法时,我可以从调用点返回嵌套模块的列表。我在文档和其他地方看到的唯一示例显示了在嵌套模块定义中放置和运行的方法调用:Ruby 如何访问模块定义外部的Module.nesting返回,ruby,methods,module,namespaces,constants,Ruby,Methods,Module,Namespaces,Constants,使用Module.nesting方法时,我可以从调用点返回嵌套模块的列表。我在文档和其他地方看到的唯一示例显示了在嵌套模块定义中放置和运行的方法调用: module M1 module M2 Module.nesting #=> [M1::M2, M1] end end module A module B; end module C module D $chain = Module.nesting end end end p $c
module M1
module M2
Module.nesting #=> [M1::M2, M1]
end
end
module A
module B; end
module C
module D
$chain = Module.nesting
end
end
end
p $chain
#=> [A::C::D, A::C, A]
在以下示例中:
module A
module B; end
module C
module D
# I want to access the name-space chain from this point
end
end
end
# But how can I reference it from our here?
# A::C::D .... ?
一旦定义了模块内的名称空间链,是否有办法检查该链
我能看到的唯一示例是在定义中创建一个变量,以便在定义之外再次引用生成的调用:
module M1
module M2
Module.nesting #=> [M1::M2, M1]
end
end
module A
module B; end
module C
module D
$chain = Module.nesting
end
end
end
p $chain
#=> [A::C::D, A::C, A]
是否有一种方法可以向上查看此名称间隔链,而不必在定义中创建变量以供以后引用?请考虑问题中提到的以下嵌套模块
module A
module B; end
module C
module D
Module.nesting
end
end
end
#=> [A::C::D, A::C, A]
现在试试这个:
module A::C::D
Module.nesting
end
#=> [A::C::D]
按字典顺序解析模块的嵌套,这意味着模块按其包含点排序,从A::C::D
开始向外工作<代码>模块::嵌套不“记住”从何处定义模块的嵌套;它只在本地检查代码。这与子类化相反
也许你可以通过使用这个方法获得你需要的信息
在Ruby中,“记住”表达式值的方法是将该值赋给变量
此外,模块定义的值是在主体内计算的最后一个表达式的值
如果你把两者放在一起,你会得到如下结果:
chain=模块A
模块B;结束
模块C
模块D
模块嵌套
结束
结束
结束
p链
#[A::C::D,A::C,A]
在这种情况下,这些信息如何有用?它与在模块名上拆分:
得到的结果有什么不同?老实说,这个问题纯粹是出于好奇。我不知道我脑子里是否有一个特定的用例。只是想知道这种事情是否可能发生!为了增进理解而进行的学术调查没有错。只是问,因为可能有另一种更简单的方法来解决你的问题。