2011-01-20 10 views
30

Co to jest łatwy sposób, aby dowiedzieć się, jakie metody/właściwości wyeksponować obiekt ruby?Odkrywanie członków obiektu Ruby?

Jako przykład, aby uzyskać informacje o członku na sznurku, w PowerShell można zrobić

"" | get-member 

w Pythonie,

dir("") 

Czy istnieje prosty sposób na znalezienie informacji członkowski obiekt Ruby?

Odpowiedz

9

dwa sposoby uzyskania metod obiektu za:

my_object.methods 
MyObjectClass.instance_methods 

Jedno zrobić przycinać listę odziedziczonych metod z klasy bazowej obiektu:

my_object.methods - Object.instance_methods 

do listy atrybutów obiektu to:

object.attributes 
+12

#attributes jest specyficzny dla AR; dla zwykłego obiektu ruby ​​istnieją #instance_variables. Możesz również przekazać wartość false jako argument do #methods, aby pomijać odziedziczone. – noodl

+0

@Noodl, dzięki. Miałem na myśli instancyjne zmienne, ale mam za dużo Railsów w mojej głowie :) –

+2

Trochę stare, ale 'instance_variables' nie wydaje się pokazywać niezainicjowanych zmiennych, miało nadzieję, że pokazało atrybuty ustawione za pomocą' attr_accessor' lub jego kuzynów –

14

Ruby nie ma właściwości. Za każdym razem, gdy chcesz uzyskać dostęp do zmiennej instancji w innym obiekcie, musisz użyć metody, aby uzyskać do niego dostęp.

+4

Wspaniale jest wiedzieć, że wszystko jest metodą. Dzięki, Andrew – Sung

0

Użyj tego:

my_object.instance_variables 
4

Istnieją dwa sposoby, aby tego dokonać:

obj.class.instance_methods(false), gdzie 'false' oznacza, że ​​nie będzie to metody nadklasy, więc na przykład o:

class Person 
    attr_accessor :name 
    def initialize(name) 
    @name = name 
    end 
end 

p1 = Person.new 'simon' 
p1.class.instance_methods false # => [:name, :name=] 
p1.send :name # => "simon" 

druga jest z:

p1.instance_variables # => [:@name] 
p1.instance_variable_get :@name # => "simon"