gpt4 book ai didi

ruby - 如何在 Ruby 中找到方法的嵌套?

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

在 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/

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