具有来自includer类的静态方法调用的Ruby模块
我需要在使用包含此模块的类中的方法的模块中定义常量:具有来自includer类的静态方法调用的Ruby模块,ruby,include,module,constants,Ruby,Include,Module,Constants,我需要在使用包含此模块的类中的方法的模块中定义常量: module B def self.included(base) class << base CONST = self.find end end end class A def self.find "AAA" end include B end puts A::CONST 模块B def自带(基本) 类在您的特定情况下 module B def self.inclu
module B
def self.included(base)
class << base
CONST = self.find
end
end
end
class A
def self.find
"AAA"
end
include B
end
puts A::CONST
模块B
def自带(基本)
类在您的特定情况下
module B
def self.included(base)
base.const_set("CONST", base.find)
end
end
class A
def self.find
"AAA"
end
include B
end
puts A::CONST
尽管有效,但还是有点乱。你确定不能用不同的方法来实现你的目标吗?在Ruby中实现这一目标的更惯用的方法是:
module B
def self.included(klass)
klass.class_eval <<-ruby_eval
CONST = find
ruby_eval
# note that the block form of class_eval won't work
# because you can't assign a constant inside a method
end
end
class A
def self.find
"AAA"
end
include B
end
puts A::CONST
不确定这是否有帮助,但如果您不理解,您仍然可以使用上面的class\u eval习惯用法。模块B
module B
def self.included(base)
class << base
CONST = self.find
end
end
end
class A
class << self
def self.find
"AAA"
end
end
include B
end
def自带(基本)
是的,我也得到了这个解决方案。但那个元呼叫不是个好主意。还有更直接的方法吗?您正在尝试在运行时动态分配一个常量值。另外,其他方法将引发“动态常数赋值”错误。
module B
def self.included(base)
class << base
CONST = self.find
end
end
end
class A
class << self
def self.find
"AAA"
end
end
include B
end