quando si utilizza attr_accessor per definire gli attributi in una classe, Ruby utilizzando refexion, definire un paio di metodi, per ogni attributo dichiarato, uno per ottenere il valore e l'altro per impostare, una variabile con lo stesso nome istanza dell'attributo
si può vedere questo metodo utilizzando
p A.instance_methods
[:x, :x=, :y, :y=, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?,..
quindi questo attributi sono accessibili, al di fuori della classe, con
p "#{a.x},#{a.y}"
o all'interno della classe attraverso la corrispondente variabile di istanza
class A
...
def attributes
[@x,@y]
end
...
end
p a.attributes #=> [5,10]
Nota: attrs tornerà * tutto * variabili di istanza, piuttosto che solo quelle esposte da 'attr_accessor' – Jonah
@Jonah: sì, quella era l'ipotesi di allora. Per un metodo più preciso, si può fare riferimento a [questa risposta] (http://stackoverflow.com/a/34440466/125816). –