假设我有
module Mod
def self.included(base)
some_method
end
def some_method
end
end
class A
include Mod
end
Run Code Online (Sandbox Code Playgroud)
我得到的some_method
是没有定义.那么怎么可以some_method
尽快打电话Mod
?
您必须创建一个base
类实例来调用它.
module Mod
def self.included(base)
base.new.some_method
end
def some_method
end
end
class A
include Mod
end
Run Code Online (Sandbox Code Playgroud)
之后,包括模块Mod
,some_method
将作为类的实例的实例方法A
.
included
当模块包含在类中并some_method
在类级别上调用时,在类级别调用该方法.因此some_method
需要成为一种类方法.这将有效(注意self.some_method
):
module Mod
def self.included(base)
some_method
end
def self.some_method
end
end
class A
include Mod
end
Run Code Online (Sandbox Code Playgroud)
或者您需要首先创建基类的实例并调用some_method
该实例,如答案中提到的@ArupRakshit.