【发布时间】:2020-01-01 18:19:38
【问题描述】:
我试图理解为什么我不能从开放类中调用单例类上定义的方法,但我可以从实际类中调用。
谁能解释为什么第一个例子失败而第二个例子没有?
class One
class << self
def one; end
one
end
end
NameError (undefined local variable or method 'one' for #<Class:One>)
class Two
class << self
def one; end
end
self.one
end
=> nil
【问题讨论】:
-
我认为(如果我错了,请有人纠正我)元类习语更像是模块扩展而不是继承模式,例如
module One; def one; end; end然后class Two; extend One; end在这种情况下One没有方法one但是通过扩展Two有。因此One.one #=> NoMethodError但是Two.one工作正常
标签: ruby metaprogramming metaclass