イントロスペクション
今日はイントロスペクションを学習。javaでいうリフレクションってやつです。
では早速。
methods = "a".methods
ってやると、文字列aのメソッドが配列の形で取得できる。特定のメソッドを取得するには以下のようにする。
method = "a".method("*")
ちなみに、この「*」もメソッドだったんですねぇ。ってことで、以下の二つは同じ動作をします。
# 両方とも結果はaaaaaとなる "a" * 5 "a".*(5)
取得したmethodを実行するには以下のようにする。
method.call(5) # aaaaaとなる
あと、こんな書き方も。これも同じ結果になる。
"a".send("call", 5) # aaaaaとなる
ちなみにjavaのリフレクションだとこんな感じ。
String str = "a"; str.getClass().getMethod("concat").invoke(str, "aaaa"); // aaaaaとなる
Stringクラスからメソッド情報を取得してから実行しようとするので、どのインスタンスのメソッドとして実行するの?っていう情報を渡さないといけない。これはこれで分かりやすいから好きだけど、やっぱrubyの方が簡単ですな。