とんちゃんといっしょ

Cloudに関する技術とか日常とかについて書いたり書かなかったり

第23回 Ruby / Rails 勉強会〜Rubyのリフレクション〜

Rubyリフレクションで黒魔術の一端に触れる
前にICPCの忘年会でお会いしたことがあったが、やっぱりKMCの人だったか。


基本は大半の機能が「実行時処理」で実行前の処理に手を出せない。
例えば「構文儀をいじる方法」や「Lispのマクロのようなもの」がないらしい。


特異メソッド=あるオブジェクト特有のメソッド
特異クラス=あるオブジェクト特有のクラス

class <<a
  def a.x
  end
end


今回のテーマはModule#define_methodを使用
以下のメソッドを作成

class A
  extend Definable
    define :foo, 32
    define :bar, "barbar"
end

A.new.foo #=> 32
A.new.bar #=> "barbar"

module Definable
  def define(name, val)
    define_method(m){v} end
  end
end


だめだ、なんとなくわかるけど所詮なんとなくでしかない。
きっとPascalが把握してるだろうから、あとでわかりやすく解説してもらおう。


コツ
・必要な情報はどのクラスが持っているかを意識する
・Object/Moduleあたりをリファレンスで確認・あとは妄想
irbで実際に確認してみるのも手


おまけ

(1..10).map(&3.method(:+))


イミフ