在因为问题 重复而投票关闭之前,我想说我的问题确实很简单(不是上述提到的问题之一)。
有两个模块,一个使用
当我们使用
问题: 对于类来说,如果模块中的方法被定义为模块方法或混合方法都没有关系,是吗?我的意思是,当使用
如果我错了——哪里有区别呢?
有两个模块,一个使用
extend self
定义模块方法,另一个定义混入方法。module A
extend self
def module_a_meth
"Called module_a_meth"
end
end
module B
def module_b_meth
"Called module_b_meth"
end
end
有一个类,我同时使用include
和extend
这些模块:
class Test
include A
extend A
include B
extend B
end
当我们使用
include
导入模块时,它的方法变成类的实例方法;当使用extend
扩展时,它的方法变成类方法。问题: 对于类来说,如果模块中的方法被定义为模块方法或混合方法都没有关系,是吗?我的意思是,当使用
include
导入时,每个方法(无论是模块方法还是混合方法)都变成了实例方法,而当使用extend
扩展时,每个方法都变成了类方法。如果我错了——哪里有区别呢?
obj = Test.new
puts obj.module_a_meth
puts obj.module_b_meth
puts Test.module_a_meth
puts Test.module_b_meth
#=> Called module_a_meth
#=> Called module_b_meth
#=> Called module_a_meth
#=> Called module_b_meth
编辑
请以是或否开始你的回答,因为我的问题暗示了这种类型的答案 :).