获得常数的所有者

时间:2016-02-21 08:09:33

标签: ruby constants receiver

使用(n继承)方法,可以通过以下方式实现定义它的接收器/类:

class A
  def foo; end
end

class B < A
end

B.instance_method(:foo).owner # => A

使用(n继承)常量,与instance_methodmethod方法没有对应关系,所以它并不简单。是否有可能实现定义它的类?

class A
  Foo = true
end

class B < A
end

B.some_way_to_extract_the_owner_of_constant(:Foo) # => A

2 个答案:

答案 0 :(得分:5)

喜欢,下面的代码:

class A
  Foo = true
end

class B < A
end

B.ancestors.find { |klass| klass.const_defined? :Foo, false }
# => A

答案 1 :(得分:2)

与@ Arup的答案类似,但我使用了Module#constants

    {
      "phonenumber":"9123456789",
      "password":"password"
  }