Ruby objet imprime comme pointeur
Je suis en train de créer une classe qui a un constructeur qui prend un seul argument. Lorsque je crée une nouvelle instance de l'objet, elle renvoie un pointeur.
class Adder
def initialize(my_num)
@my_num = my_num
end
end
y = Adder.new(12)
puts y
Ce que je fais mal?
Grâce
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez
new
méthode, vous obtenez la "référence" sur l'objet nouvellement créé.puts
noyau méthode retourne à l'interne ruby informations à propos de cet objet. Si vous souhaitez obtenir des informations à propos de l'état de votre objet, vous pouvez utiliser la méthode de lecture:Ou vous pouvez utiliser 'attr_reader méthode qui permet de définir un couple de setter et getter méthodes de derrière la scène:
attr_reader :my_num
ici, au lieu de définir votre propre méthode qui ne le même.Vous ne faites rien de mal. En supposant que vous voyez quelque chose comme
#<Adder:0xb7f9f710 @my_num=12>
puis en Ruby, c'est juste la représentation de l'objet que vous avez créé.Si vous souhaitez modifier ce comportement pour être plus convivial quand vous passez votre objet de
puts
vous pouvez remplacer le to_s (string) de la méthode. par exemple,puis, quand vous ne
puts y
vous verrezAdder with my_num = 12
Vous pouvez également remplacer la
inspect
méthode qui est ce qui est utilisé, par exemple, lorsque le Rubis de la cisr console imprime la représentation de l'objet par exemplepuis dans de la cisr:
C'est parce que l'objet est un pointeur. En Ruby, tous les objets sont alloués sur le tas, et les variables sont juste des références.
Lorsque vous ne
Il est fait appel par défaut to_s méthode de l'objet, qui est juste à la sortie de la classe le nom, l'emplacement de la mémoire, et quelques infos sur les variables d'instance de l'objet.
Ruby n'a pas de pointeurs. Dans votre exemple,
y
est une instance deAdder
avec une variable d'instance appelée@my_num
avec la valeur de12
(qui est lui-même unFixnum
objet).La
puts
méthode appelle lato_s
méthode de quelles que soient les arguments que vous le transmettre. C'est ce que vous voyez le résultat, peut-être vous pensez que la production fait référence à un pointeur, mais c'est juste une représentation textuelle de l'objet. Vous pouvez le modifier en remplaçant lato_s
méthode d'instance pour toute la classe.