ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

オブジェクト指向

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

インスタンスのメソッド一覧

instance_variables

インスタンスインスタンス変数一覧

instance_methods(false)

インスタンススーパークラスメソッド一覧

alias

alias <新メソッド名> <旧メソッド名>
alias <新グローバル変数名> <旧グローバル変数名>
  1. カンマは死闘しない
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"]
  1. 以前定義したhuga1も含まれる
  2. 変更することも可能

※自分が定義してないクラスでも再オープンが可能

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 :: += != !~