Ruby 言語内 DSL
ってなわけで、おもむろに「初めてのRuby」を手に取ったわけですが。
大分忘れてます^^;
解釈に少し時間がかかったので、メモしときます。P175
今までは、ただ何も考えず使うだけだったRakeとか便利な言語内DSL
その中身がどんなんかなんて考えたこともなかったです。
言語内DSLでは、どうやらコンテキストのすり替えを行うことで、目的の処理を実行しているようです。
dsl_1,dsl_2みたいな命令があったとしたら、DSL言語内部は多分こんな感じ
class TestDsl def dsl &prc self.instance_eval(&prc) end def dsl_1 p "dsl_1" end def dsl_2 p "dsl_2" end end
このように書いとくと、以下のようにして呼べる
TestDsl.new.dsl do dsl_1 dsl_2 end #これを実行すると # => "dsl_1" # => "dsl_2" って出力される
分かってしまえば、当たり前のことなんだけど、ちゃんと理解できてなかった。
上記コードでは、dsl_1,dsl_2の呼び出しのレシーバは、TestDslのインスタンスになっている
通常ブロック呼び出しのところの文のレシーバは、mainになるんだけどここでは、
「self.instance_eval(&prc) 」
の部分で、評価コンテキストをTestDslにすり替えて実行している。
勉強足りないな〜。
とりあえず、これからの予定として
・gemの作り方を調べる
・rakeのソースリーディング
この二つをやっていこうかな。