module Superpower
# instance method
def turn_invisible
...
end
# module method
def Superpower.turn_into_toad
...
end
module Fly
def flap_wings
...
end
end
end
Class Superman
include Superpower
...
def run_away
# how to call flap_wings?
# how to call turn_invisible?
end
def see_bad_guys(bad_guy = lex_luthor)
#is this correct?
Superpower.turn_into_toad(bad_guy)
end
end
嗨,我看到了一些我无法理解的ruby代码。你如何从超人课程中调用flap_wings?是否可以从类中调用实例方法?包含模块和嵌入模块有什么区别?为什么以及何时应该这样做?
答案 0 :(得分:2)
我假设当您说嵌入模块时,您的意思是“示例”中的“Fly”模块嵌入在“Superpower”中。
如果是这种情况,我会称之为嵌套模块。我使用嵌套模块的唯一一次是嵌套模块专门处理主模块时,Fly中的代码与Superpower直接相关,但为了方便和可读性而分开。
你可以使用嵌套模块的方法,只需先包含超级大国,然后再飞第二,就像这样:
Class Superman
include Superpower
include Fly
# ...
end
详情请见this blog。
答案 1 :(得分:1)