2011-01-20 25 views
30

¿Cuál es una manera fácil de descubrir qué métodos/propiedades expone un objeto ruby?¿Descubrir a los miembros del objeto Ruby?

A modo de ejemplo, para obtener información de miembro por una cadena, en PowerShell, puede hacer

"" | get-member 

En Python,

dir("") 

¿Existe una manera tan fácil de descubrir información miembro un objeto Ruby?

Respuesta

2
object.methods 

volverá una serie de métodos en el objeto

9

dos maneras de obtener métodos de un objeto:

my_object.methods 
MyObjectClass.instance_methods 

Algo que hago para podar la lista de los métodos heredados de la clase base del objeto:

my_object.methods - Object.instance_methods 

lista Para atributos de un objeto:

object.attributes 
+12

#attributes es AR específico; para un objeto simple de rubí, hay #instance_variables. Además, puede pasar falso como argumento a #methods para omitir los heredados. – noodl

+0

@noodl, gracias. Quise decir instance_variables, pero tengo demasiados Rails en mi cabeza :) –

+2

Tipo de viejo, pero 'instance_variables' no parece mostrar variables no inicializadas, esperaba que mostrara los atributos establecidos con' attr_accessor' o sus primos –

14

Ruby no tiene propiedades. Cada vez que desee acceder a una variable de instancia dentro de otro objeto, debe usar un método para acceder a ella.

+4

Es genial saber que todo es un método Gracias Andrew – Sung

0

Utilice esta:

my_object.instance_variables 
4

Hay dos maneras de lograr esto:

obj.class.instance_methods(false), donde 'false' significa que no incluirá métodos de la superclase, así por ejemplo que tiene:

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" 

el otro es con:

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