Shibuya.rb
最近Shibuya.rbというのを同僚のid:bash0C7が始めました。
そういうことで僕はその集まりに遊びにいきました。
Shibuya.rbは素人でもいいらしいので、僕は図にのって簡単にLT的なものをした。
実はお昼休みにメタプログラミングRubyの読書会があったのでそれに行った。
そこで、ちょっと質問をした
phpだとこんな事ができる。
$str = "Unlearned"; $unlearned_instance = new $str();
上記プログラムでUnlearnedクラスがあった場合、Unlearnedのインスタンスを取得できる。
文字列から、その文字列の示すクラスのインスタンスが欲しかった場合、rubyだったらどうやってやればいいのだろう。
僕は昔書いたrubyでこんな風にやっていて、スゴく気持ち悪かった。
str = "Unlearned" unlearned_instance = eval(str + ".new")
そしたらid:tadasyがActive Supportだとかをしらべてくれて、
Class.const_getをつかって実装されていると教えてくれた。
str = "Unlearned" class = Class.const_get str unlearned_instance = class.new
なんかこんな感じの方がevalつかうより気持ちよく感じる。
最終的にはちょっとだけ頭をつかってid:tadasyにいろいろ教えてもらいつつ、
こんな感じになった。
class String def constantize Class.const_get self end end str = "Unlearned" unlearned_instance = str.constantize.new
んで、僕はこの内容を話してみた。というわけです。
とても面白い会合でした。