假设我有
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.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |