2011-01-20 3 views
30

Qual è un modo semplice per scoprire quali metodi/proprietà viene esposto da un oggetto rubino?Scoprire i membri degli oggetti Ruby?

A titolo di esempio per ottenere informazioni sui membri di una stringa, in PowerShell, si può fare

"" | get-member 

In Python,

dir("") 

Esiste un modo semplice per scoprire informazioni membro del un oggetto rubino?

risposta

2
object.methods 

restituirà un array di metodi in oggetto

9

due modi per ottenere metodi di un oggetto:

my_object.methods 
MyObjectClass.instance_methods 

Una cosa che faccio per potare la lista dei metodi ereditati dalla classe base Object:

my_object.methods - Object.instance_methods 

Per elencare gli attributi di un oggetto:

object.attributes 
+12

#attributes è specifico AR; per un semplice oggetto rubino c'è #stanza_variabile. Inoltre, puoi passare falso come argomento a #methods per saltare quelli ereditati. – noodl

+0

@noodl, grazie. Volevo dire instance_variables, ma hanno troppo Rails nella mia testa :) –

+2

Kind of vecchio, ma 'instance_variables' doesnt sembrano mostrare le variabili non inizializzate, speravo ha mostrato attributi impostati con' attr_accessor' oi suoi cugini –

14

Il rubino non ha proprietà. Ogni volta che si desidera accedere a una variabile di istanza all'interno di un altro oggetto, è necessario utilizzare un metodo per accedervi.

+4

E 'bello sapere che tutto è un metodo Grazie Andrew – Sung

0

Utilizzare questa:

my_object.instance_variables 
4

Ci sono due modi per ottenere questo risultato:

obj.class.instance_methods(false), dove 'false' significa che non includerà i metodi della superclasse, così per esempio avere:

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" 

l'altro è con:

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