オブジェクト指向
1.指定されたクラス名で定数を作成する
2.定数に定義されたクラスを格納する
class <クラス名> end
initialize
初期化メソッド
継承
def Foo initialize(a) @a = a end end def FooExt < Foo initialize(a,b) @b = b super a end end
ancestorsメソッド
継承順にクラスリストを返す
p Foo.ancestors #[Foo, Object, Kernel] p FooExt.ancestors #[FooExt, Foo, Object, Kernel]
クラス区分
Foo < Object #true Foo > Object #false
instance_method
インスタンスのメソッド一覧
alias
alias <新メソッド名> <旧メソッド名> alias <新グローバル変数名> <旧グローバル変数名>
- カンマは死闘しない
class Hoge def huga1; end def huga2; end alias :huga3 :huga1 end p Hoge.instance_methods(false) #["huga1","huga2","huga3"]
undef
指定された定義を取り消しするもの
undef <メソッド名> undef <メソッド名>,<メソッド名>
例
class Hoge def huga1; end def huga2; end undef huga1 end p Hoge.instance_methods(false) #["huga2"]
method_missing
NoMethodErrorが発生した場合、代わりに呼ばれるメソッド
class Hoge def method_missing(m, *args) p "called:" + m.to_s super #例外が発生させる end end Hoge.new.no_method #"called:no_method"を表示後、例外発生する
クラスの再オープン
定義されたクラスを再定義すると再オープンされて続きが定義される
class Hoge def huga1; end end class Hoge def huga2; end end Hoge.instance_methods(false) # ["huga1","huga2"]
- 以前定義したhuga1も含まれる
- 変更することも可能
※自分が定義してないクラスでも再オープンが可能
class String def huga; 1; end end p "my string".huga #1
クラスメソッド
クラス名+メソッド名
def classname.method
selfのメソッド名
def self.method
class << クラス名
class<<classname def method
オーバーライド出来ない演算子
= ?: .. ... ! not && and || or :: += != !~