2011-10-17 11 views
12

jestem trochę zagubiony tego zachowania z Ruby (1.9) interpreteradostać metody obiektu w 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 

tej pory tak dobrze.

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

nadal w porządku. właśnie tego się spodziewałem, ale dlaczego to jest puste?

x.methods(false) 
=> [] 

podczas gdy to daje mi to, czego się spodziewałem?

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

Odpowiedz

1

Wygląda na to, że nie ma dokumentacji dla metod obiektu powyżej Ruby 1.9.1. Jakby już nie istnieje. (spójrz na http://www.ruby-doc.org/core-1.9.3/Object.html)

Przypuszczam, że to jest wyjaśnienie, że jeden powinien używać jednego z .singleton_methods lub .instance_methods, aby określić, gdzie metody żyją.

W każdym razie nieudokumentowana metoda może zrobić, co chce.