module A
def before
puts :before
end
end
module B
before
end
class Test
include A
include B
end
因此,目标是在解析模块B时调用before
,而无需在模块B中使用extend A
。
Ruby 2.5.1
答案 0 :(得分:0)
include
模块时,它将采用该模块的实例方法并将其作为实例方法导入。但是,您在此处调用before
方法的方式仅在它是 class 方法时才有效。
如果您希望B导入before
作为类方法,则可以使用extend
:
module B
extend A
before
end
没有附加的extend
,仅在实例方法范围内,并且仅当before
调用B上的方法时,才可以从B调用Test
:
module A
def before
puts :before
end
end
module B
def call_before
before
end
end
class Test
include A
include B
def do_thing
call_before
end
end
Test.new.do_thing # => before