:pぴー.sendせんど(:pぴー, :pぴー)

mokoaki
mokoriso@gmail.com

2017/07/22

組み込みクラス

Ruby技術者認定試験の書籍写経メモ

BasicObjectクラス

Objectクラス

オブジェクトのID

object_id
#=> 70101064135100

1.object_id
#=> 3

'a'.object_id
#=> 70101068557740
1.object_id
#=> 3
1.object_id
#=> 3

true.object_id
#=> 20
true.object_id
#=> 20

:a.object_id
#=> 735708
:a.object_id
#=> 735708

'a'.object_id
#=> 70101068360700
'a'.object_id
#=> 70101068344640

オブジェクトのクラス

オブジェクトが何のクラスから生成されたのかを調べるには

'a'.class
#=> String

:a.class
#=> Symbol

オブジェクトの比較

equal? オブジェクトIDの比較
eql? ハッシュキーの比較 (1.hash => -1838658016341557374)
== クラスにより何を持って同じとするのか異なるのでクラスによって再定義される
=== クラスにより何を持って同じとするのか異なるのでクラスによって再定義される

例えば、String#== は eql? と同じ結果を返す

1.equal?(1)
=> true

'a'.equal?('a')
=> false

1.eql?(1)
=> true

'a'.eql?('a')
=> true

オブジェクトのメソッド一覧

通常は継承したメソッドも表示されるが、引数にfalseを渡すと(継承, extend, include)したメソッドは表示されなくなる (methodsは特異メソッドのみになるらしい?)

methods 呼び出し可能(public, protected, singleton)なメソッドの一覧
private_methods プライベートメソッドの一覧
protected_methods プロテクテッドメソッドの一覧
public_methods パブリックメソッドの一覧
singleton_methods 特異メソッドの一覧

オブジェクトの複製

シャローコピーしたほぼ同じオブジェクトを複製する

dup 汚染状態、インスタンス変数、ファイナライザも複製する
clone 汚染状態、インスタンス変数、ファイナライザ、凍結状態、特異メソッドも複製する

インスタンス変数に外部からアクセスする

instance_variables インスタンス変数の一覧を取得
instance_variable_set インスタンス変数の設定
instance_variable_get インスタンス変数の取得
class Moko
end

moko = Moko.new

moko.instance_variables
#=> []

moko.instance_variable_get(:@homo)
#=> nil

moko.instance_variable_set(:@homo, true)

moko.instance_variable_get(:@homo)
#=> true

moko.instance_variables
#=> [:@homo]

moko.instance_variable_get('@homo') # 文字列でもいいらしい
#=> true

未定義メソッドの呼び出し

method_missing の辺りを参照してね

オブジェクトの文字列表現

オブジェクトの文字列表現には to_s, inspectメソッドを使いますが、オブジェクトによってどのような文字列にすればよいのかは千差万別であり、それぞれのクラスで定義し直されています、あなたが作ったクラスでも定義すべきかと思います

to_s 文字列表現を返す
inspect 人間が読める形の文字列表現を返す

特別なオブジェクト

[true, false, nil] はそれぞれ [TrueClass, FalseClass, NilClass] クラスのオブジェクトであり、唯一のインスタンスとなります