単一の引数を取るコンストラクターを持つクラスを作成しようとしています。オブジェクトの新しいインスタンスを作成すると、ポインターが返されます。
class Adder
def initialize(my_num)
@my_num = my_num
end
end
y = Adder.new(12)
puts y
私は何を間違えていますか?ありがとう
new
メソッドを使用すると、新しく作成されたオブジェクトの「参照」を取得します。 puts
カーネルメソッドは、このオブジェクトに関する内部Ruby情報を返します。オブジェクトの状態に関する情報を取得する場合は、getterメソッドを使用できます。
class Adder
def initialize(my_num)
@my_num = my_num
end
def my_num
@my_num
end
end
y = Adder.new(12)
puts y.my_num # => 12
または、舞台裏でいくつかのsetterおよびgetterメソッドを定義する 'attr_reader'メソッドを使用できます。
class Adder
attr_accessor :my_num
def initialize(my_num)
@my_num = my_num
end
end
y = Adder.new(12)
puts y.my_num # => 12
これは、オブジェクトisポインターだからです。 Rubyでは、すべてのオブジェクトはヒープに割り当てられ、変数は単にそれらへの参照です。
するとき
puts y
実際には、オブジェクトのデフォルトのto_sメソッドを呼び出しています。これは、クラス名、メモリの場所、およびオブジェクトのインスタンス変数に関する情報を出力するだけです。
Rubyにはポインターがありません。あなたの例では、y
は、@my_num
(それ自体はAdder
オブジェクト)の値を持つ12
というインスタンス変数を持つFixnum
のインスタンスです。
puts
メソッドは、渡す引数のto_s
メソッドを呼び出します。それが出力です。おそらく、出力はポインタを参照していると思うかもしれませんが、それはオブジェクトの単なるテキスト表現です。クラスのto_s
インスタンスメソッドをオーバーライドすることで変更できます。