クラス変数/クラスインスタンス変数/インスタンス変数
クラス変数
C++で言うところのstaticメンバ変数。
クラスインスタンス変数
クラス変数とほぼ同じだが、継承されない。そのクラスだけのクラス変数。
インスタンス変数
C++で言うところのメンバ変数。
|
+
|
example... |
class Hoge
@@class_var = 1 # クラス変数
@class_instance_var = 2 # クラスインスタンス変数
def initialize
@instance_var = 3 # インスタンス変数
end
end
|
クラスメソッド/インスタンスメソッド
クラスメソッド
C++で言うところのstaticメンバ関数。クラスオブジェクトの特異メソッドとして定義する。
インスタンスメソッド
C++で言うところのメンバ関数。
|
+
|
example... |
class Hoge
def Hoge.foo # クラスメソッド(def self.fooでも可)
end
def fuga # インスタンスメソッド
end
end
|
privateメソッド/protectedメソッド
privateメソッド
外部から呼び出すこと(インスタンスをレシーバとした呼び出し方)はできない。
ただし、C++とは異なり、派生クラス内から呼び出すことができる。(C++のprotectedのような感じ?)
protectedメソッド
よくわからん。
基本的にはprivateメソッドと同様、外部からは呼び出せず派生クラスからは呼び出すことができる。
ただし、レシーバ指定の呼び出し方ができる点がprivateメソッドと異なるらしい。
メソッドのオーバーロード
できない。
デフォルト引数を使ってごまかす。
initializeメソッド
newメソッドから呼ばれる。可視性はprivate。
C++のコンストラクタとは異なり、派生クラスをnewした時、基本クラスのinitializeメソッドは呼ばれない(派生クラスのinitializeメソッドは基本クラスのinitializeメソッドをオーバーライドしたもの)。基本クラスのinitializeメソッドを実行したい場合は、superで明示的に呼ぶ必要がある。
派生クラスでinitializeメソッドを明示的に定義しなかった場合、基本クラスのinitializeメソッドが呼ばれる。
superメソッド
superとsuper()は異なる。
superは、オーバーライドしているメソッドの引数をオーバーライドされているメソッドにわたす。
super()は、引数なしでオーバーライドされているメソッドを呼び出す。
|
+
|
example... |
class Foo
def initialize(arg=0)
end
end
class Bar < Foo
def initialize(arg)
super # Foo::initialize(arg)が呼ばれる. super(arg)と書くのと同じ.
super() # Foo::initialize()が呼ばれる.
arg = 10
super # Foo::initialize(10)が呼ばれる.
end
|
列挙型
Rubyに列挙型(enum)は準備されていない。enumの実現にはシンボルを用いるのが一般的らしい。
C++のenumのように利用したい場合、シンボルをmodule定数にしてしまえばよい。
|
+
|
example... |
module FRUIT
APPLE = :APPLE
ORANGE = :ORANGE
end
# FRUIT::APPLE, FRUIT::ORANGEのようにして使う.
|
コメント
最終更新:2011年09月16日 22:23