Ruby object prints out as pointer
When you use new
method, you get 'reference' on newly created object. puts
kernel method returns some internal ruby information about this object. If you want to get any information about state your object, you can use getter method:
class Adder def initialize(my_num) @my_num = my_num end def my_num @my_num endendy = Adder.new(12)puts y.my_num # => 12
Or you can use 'attr_reader' method that define a couple of setter and getter methods behind the scene:
class Adder attr_accessor :my_num def initialize(my_num) @my_num = my_num end endy = Adder.new(12)puts y.my_num # => 12
You aren't doing anything wrong. Assuming you see something like #<Adder:0xb7f9f710 @my_num=12>
then in Ruby this is just the default representation of the object that you've created.
If you want to change this behaviour to be more friendly when you pass your object to puts
you can override the to_s (to string) method. e.g.
class Adder def initialize(my_num) @my_num = my_num end def to_s "Adder with my_num = #{@my_num}" endend
then when you do puts y
you'll see Adder with my_num = 12
You can also override the inspect
method which is what is used, for example, when the Ruby irb console prints the representation of your object e.g.
class Adder def inspect to_s # return same representation as to_s endend
then in irb:
>> y = Adder.new 12=> Adder with my_num = 12
That's because the object is a pointer. In Ruby, all objects are allocated on the heap, and the variables are just references to them.
When you do
puts y
It is actually calling the default to_s method of the object, which is just to output the class name, the memory location, and some info on the instance variables of the object.