遇到一个问题没弄明白,向达人请教一下,代码如下:
Module M class << self def test puts "Which?" end end end
这里定义的 test 方法是属于哪个对象呢?或者怎样调用这个方法呢?
test
以上,感谢
属于 M 这个对象 (module 和 class 本身都是对象)。
调用方法:
M::test
or
M.test
#1 楼 @ashchan 这么做就是为了可以不用把 Module include 到类中,可以直接使用 M.test?
include
#1 楼 @ashchan 应该说属于 M 这个对象的 eigenclass 方法永远是属于类的,只有实例变量属于对象
#2 楼 @andor_chen 可用的场景很多。可能也是由于 Ruby 提供了太多定义“类”方法的途径。
#3 楼 @edokeh 在 Ruby 中,类与对象是没有任何区别的。
#4 楼 @ashchan 没错,但是 test 方法确实不属于 M 这个对象
#5 楼 @edokeh 我说没有区别是对第二句来说的。楼主既然问这个问题,他可能对 eigenclass(这个东东本身就有太多种叫法了)还不是太了解。
至于第一句,我们对“属于”的理解可能不大一样:)
我的理解是,在 methods chain 中能找到(亦即 obj.respond_to? :method 为 true),就认为该方法属于该对象。
这个等同于这样:
module M def self.test puts "Which?" end end
或者这样:
class M def self.test puts "Which?" end end
不同的是,module 的可以用来 include
我的理解: 没有属于不属于的问题,你为 M 定义了一个单例方法,这个方法定义在 M 的 eigenclass 中。 可以通过
c = class << M self end
只有 M 可以响应这个方法,因为 c 是个单例类,test 是 c 的 instance method
to all:
感谢各位的回复,看样子还得继续看书,好好理解一下