気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Ruby Objectクラスをざっくり理解する

Objectクラスとは

  • すべてのクラスのスーパークラス
  • Kernelモジュールをインクールド。すべてのオブジェクトでKernelモジュールメソッドが使用可能

オブジェクトのID

オブジェクトに割り当てられている重複しない整数を取得する。

a = "foo"
a.object_id
=> 70209846794980

a.__id__
=> 70209846794980

同じリテラルであってもオブジェクトが異なれば、IDは異なる。
TureClass,FalseClass,NilClass,Symbol,Fixnumクラスのインスタンス
同じリテラルの場合、同じオブジェクトとなるため、同じオブジェクトIDとなる 。

"a".object_id
=> 70209851930080
"a".object_id
=> 70209847105660 # 異なるID
:a.object_id
=> 350888
:a.object_id
=> 350888 # 同じID

オブジェクトの比較

オブジェクトの比較には下記のメソッドを使用

  • eql? => hashキーが同じ場合、true
  • equal? => オブジェクトIDが同じ場合、true

上記、比較メソッドはクラスによって挙動が異なる。

Stringクラスではeql?は値比較になる

a = "foo"
b = "foo"
a.eql?(b)
=> true

メソッド一覧の確認

以下に書きました。
Rubyでメソッド一覧、継承クラス一覧、includeしたモジュールを確認するメソッドたち - 気軽に楽しくプログラムと遊ぶ

オブジェクトの複製

オブジェクトの複製には下記のメソッドを使用

インスタンス変数にアクセスする

オブジェクトのインスタンス変数にアクセスするには下記のメソッドを使用

class Foo
  def initialize
    @hoge = 1
  end
end

f = Foo.new
f.instance_variables
=> [:@hoge]

f.instance_variable_get(:@hoge)
=> 1
f.instance_variable_set(:@hoge, 2)
=> 2
f.instance_variable_get(:@hoge)
=> 2

次はModuleクラスについてまとめます。