在元编程Ruby中,它告诉我们,不仅self
而且Ruby中还存在一个当前类。
我的问题是:如何知道当前的班级是什么?如果我们定义一个方法,定义放在哪里?令我困惑的是这两个代码之间的区别。运行结果不一样。
它表明也许当我们想定义一个方法时,我们使用class
打开一个类,然后定义self.method
,这与使用类<< self
打开是不同的一个类,然后定义方法。实际上,它不会在实际工作中使用,但我只想知道。
class C
def self.m1
puts "when in m1, self is #{self}"
def m2; end
end
end
class D < C
end
C.m1
# when in m1, self is C
C.instance_methods false
#=> [:m2]
C.methods false
#=> [:m1]
class C
class << self
def m1
puts "when in m1, self is #{self}"
def m2
end
end
end
end
class D < C; end
C.m1
# when in m1, self is C
C.instance_methods false
#=> []
C.methods false
#=> [:m1, :m2]
答案 0 :(得分:0)
第一段代码的当前类别为C
。尽管您在m2
中定义了self.m1
,但是当前的类是C
。 m2
是实例方法。
第二个片段的当前类别为C
的 singleton_class 。编写class << self
时,将打开当前类的单例类,在这种情况下为C
。因此,m2是C
的 singleton_class 的实例方法。