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(:+))
イミフ