我在课程中有一个包含的模块:
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_CONST
和MyClass2::MY_CONST
(当然不知道类的名称)。我可以这样做吗?
答案 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"