包含一个模块并访问一个class'es常量

时间:2014-06-09 12:16:51

标签: ruby

我在课程中有一个包含的模块:

module MyModule
  def module_method
    a = @var1 # ok
    #... working with @var1

    # now I need to access MY_CONST of a class it's included into
    p "hello from MyModule " + MY_CONST # error!
  end
end

class MyClass1
  include MyModule
  MY_CONST = "my const1"

  def instance_method1
    @var1 = "some var1"
  end
end

class MyClass2
  include MyModule
  MY_CONST = "my const2"

  def instance_method2
    @var1 = "some var2"
  end
end

a = MyClass1.new
a.instance_method1
a.module_method # error

请注意,必须包含它,而不是由类扩展。我想从模块中访问类常量MyClass1::MY_CONSTMyClass2::MY_CONST(当然不知道类的名称)。我可以这样做吗?

1 个答案:

答案 0 :(得分:2)

由于您想在实例方法中使用它,因此可以使用self.class::My_CONST

关于第二个问题,您可以使用包含的模块添加类方法:

module MyModule
  def self.included(mod)
    mod.extend ClassMethods
  end

  module ClassMethods
    def class_method
      'foo'
    end
  end
end

class A
  include MyModule
end

A.class_method   #=> "foo"