В Ruby с метапрограммированием он сказал нам, что в Ruby существует не только self
, но и текущий класс.
Мой вопрос: как узнать, какой сейчас текущий класс?если мы определим метод, где определение находится?Меня смущает разница между этими двумя кодами.Результат выполнения не совпадает.
Это указывает на то, что, возможно, когда мы хотим определить метод, мы используем 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]