作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 Ruby 中,常量查找受嵌套的影响,而方法保留其嵌套。
例如,如果我有这些模块:
module A
X = 1
end
module B
X = 2
end
module Foo
end
我可以定义一个方法 Foo.a
,它嵌套了 [A, Foo]
:
module Foo
module ::A
Module.nesting #=> [A, Foo]
def Foo.a
X
end
end
end
Foo.a #=> 1
还有一个方法 Foo.b
嵌套了 [Foo, B]
:
module B
module ::Foo
Module.nesting #=> [Foo, B]
def Foo.b
X
end
end
end
Foo.b #=> 2
如果我定义 Foo::X
,区别就会变得很明显:
Foo::X = 3
Foo.a #=> 1 <- still resolves to A::X
Foo.b #=> 3 <- now resolves to Foo::X
但是如何确定给定方法的嵌套?
最佳答案
这会起作用:
Foo.method(:a).to_proc.binding.eval('Module.nesting')
#=> [A, Foo]
Foo.method(:b).to_proc.binding.eval('Module.nesting')
#=> [Foo, B]
使用 Ruby 2.2.1 和 2.3.1 测试。它不适用于 Ruby 2.1.5。
关于ruby - 如何在 Ruby 中找到方法的嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40906992/
我是一名优秀的程序员,十分优秀!