¿Dónde se definen los métodos en el nivel superior rubí?
En el nivel superior, la definición del método debe dar lugar a métodos privados enObject
, y las pruebas parecen confirmar esto:
def hello; "hello world"; end
Object.private_instance_methods.include?(:hello) #=> true
Object.new.send(:hello) #=> "hello world"
Sin embargo, lo siguiente también funciona en el nivel superior (self.meta
es el eigenclass demain
):
self.meta.private_instance_methods(false).include?(:hello) #=> true
Parece que elhello
El método se define simultáneamente en el eigenclass de main así como enObject
. ¿Que esta pasando? Tenga en cuenta que elfalse
parámetro aprivate_instance_methods
excluye los métodos de superclase de la lista de métodos.