Non stai facendo niente di male. Supponendo che tu veda qualcosa come #<Adder:0xb7f9f710 @my_num=12>
quindi in Ruby questa è solo la rappresentazione predefinita dell'oggetto che hai creato.
Se si desidera modificare questo comportamento per renderlo più amichevole quando si passa l'oggetto a puts
, è possibile sovrascrivere il metodo to_s (in stringa). per esempio.
class Adder
def initialize(my_num)
@my_num = my_num
end
def to_s
"Adder with my_num = #{@my_num}"
end
end
poi quando lo fai puts y
vedrete Adder with my_num = 12
È anche possibile eseguire l'override del metodo inspect
che è quello che viene utilizzato, ad esempio, quando la console IRB Rubino Stampa la rappresentazione del vostro oggetto per esempio
class Adder
def inspect
to_s # return same representation as to_s
end
end
poi nel IRB:
>> y = Adder.new 12
=> Adder with my_num = 12
Sarebbe utile usare "attr_reader: my_num' qui invece di definire il proprio metodo che faccia lo stesso. – tadman
Ovviamente, ma ho pensato che usare un metodo getter sarebbe stato più chiaro per topic starter :) Infatti, ho aggiornato il mio messaggio, grazie – WarHog
Nota che attr_reader è stato menzionato e quindi è stato utilizzato attr_accessor. attr_reader funziona anche. Permette solo di ottenere il valore, mentre attr_accessor ti permette anche di assegnare un nuovo valore a my_num. –