Rubyのクラスの特徴
Rubyではクラスもオブジェクト。
Rubyでは全てのObjectに1つずつ固有の番号が振られる。
class Robot
end
robo1 = Robot.new
robo2 = Robot.new
puts "Robot: #{Robot.object_id}"
puts "robo1: #{robo1.object_id}"
puts "robo2: #{robo2.object_id}"
Robot: 70366358380820
robo1: 70366358380760
robo2: 70366358380740
Classクラスは「クラスに関する機能を備えた」クラス。
定数RobotはRobotクラスを表すオブジェクトを指している。
Robotクラスを表すオブジェクトも何かのクラスのインスタンス。
そのクラスがClassクラス。
RobotはClassクラスのインスタンスを参照する定数なので、
普通の変数のように別の変数で参照したり、メソッドの引数にできる
klass = Robot # 変数klassはClassオブジェクトを指す
robo = klass.new # Robot.newと同じ
robo.kind_of?(Robot) # クラスはメソッド引数にもなれる
ココらへんもようわからんな??
→つまりクラスも(Classクラス)オブジェクトだから、引数にできたり変数に参照したり、メソッドを呼び出したりできるってこと。
クラス定義の直下にコードを書くとクラスが読み込まれるときに実行される。
class Robot
puts "ここも実行される"
end
↑Robotクラスが読み込まれるときにputsも実行される。
クラス定義の直下、およびクラスメソッドの中では
現在のオブジェクトを表すselfはクラスオブジェクト、
つまりClassクラスのインスタンスになる。
ちなみにattr_accessor,public,privateはClassクラスのメソッド。
attr_accessorはアクセサメソッドをクラスに追加するメソッドで、
public,privateは「これから定義させるメソッドの呼び出詩制限をへんこうする」という機能のメソッド。
今日は長かったな、ここまでにしよう。
本記事は下記本の勉強記事です。初学者にとても良い本です。