メタプログラミングRuby 第5章
eval
- instance_evalやclass_evalも、evalと同じように文字列を引数にすることが出来る。
- evalとセーフレベルと汚染の考えはワンセット。
Binding
- TOBLEVEL_BINDING
- トップレベルのスコープが束縛されている
eval で実行時の束縛を指定できる。どっかで使えそうな気がする…
サンドボックス
proc { $SAFE = @safe_level }.call
ってやると、Procの中だけセーフレベルが変わる...ってマジで?と思ったので試した。
proc {$SAFE= 1}.call #=> 1 $SAFE #=> 0
マジだった。調べると、$SAFE はスレッドローカル変数といって、スレッド毎のスコープらしい。でも procってスレッドじゃないし・・・と思ったらちゃんとマニュアルに書いてあった
Procはその時点でのセーフレベルを記憶する そのProcオブジェクトがcallされると、 記憶していたセーフレベルで実行される。
http://www.ruby-lang.org/ja/man/html/_A5BBA5ADA5E5A5EAA5C6A5A3A5E2A5C7A5EB.html
フックメソッド
included はよく使うけど、他はどれくらいの数あるんだろう?そしてどのように使うべきだろう?