2011-10-17 10 views
12

estoy un poco confundido acerca de este comportamiento desde el rubí (1.9) intérpreteobtener métodos de un objeto en Ruby

class Foo 
    def pub 
    private_thing 
    end 

    private 
    def private_thing 
    puts "private touch" 
    end 
end 



x = Foo.new 
x.pub 
private touch 
=> nil 

hasta ahora tan bueno.

x.private_thing 
NoMethodError: private method `private_thing' called for #<Foo:0xb76abd34> 
from (irb):25 
from :0 

still ok. eso es lo que esperaba

pero ¿por qué está vacío?

x.methods(false) 
=> [] 

mientras esto me da lo que esperaba?

Foo.instance_methods(false) 
=> ["pub"] 

Respuesta

1

Parece que no hay documentación para los métodos Object # más allá de ruby ​​1.9.1. Como si ya no existe. (échale un vistazo a http://www.ruby-doc.org/core-1.9.3/Object.html)

Supongo que esto es para aclarar que uno debe estar usando uno de. métodos singlete o .instance_methods para determinar dónde viven los métodos.

En cualquier caso, un método no documentado puede hacer lo que quiera.

Cuestiones relacionadas