我尝试将模块A包含/扩展到模块B中,模块B又包含在C类中。然后我想调用名为cm of A的类方法,但我不知道如何。
module A
def self.included(klass)
klass.extend ClassMethods
end
module ClassMethods
def cm
puts "cm"
end
end
end
module B
include A
end
class C
extend B
end
c = C.new
c.cm # -> does not work
C.cm # -> does not work
答案 0 :(得分:1)
您可以使用扩充插件真正简化此语法:
https://github.com/henrik/augmentations
或基于它的宝石:
https://github.com/chemica/augmentations-gem
使用:
class User
augment MyModule
end
使用
等模块module MyModule
augmentation do
def self.a_class_method
# …
end
def an_instance_method
# …
end
end
end
插件本身很小,只需几行代码。
答案 1 :(得分:0)
包含模块时,请执行以下操作:
module A
def self.included(klass)
klass.include ClassMethods
puts :included
end
module ClassMethods
def cm
puts :cm
end
end
end
module B
include A
end
class C
include B
end
c = C.new
c.cm
同样在扩展类时,您可以这样做:
module X
def self.extended(klass)
klass.extend ClassMethods
end
module ClassMethods
def cm
puts :cm
end
end
end
module Y
def self.extended(klass)
klass.extend X
end
end
class Z
extend Y
end
Z.cm