Mirahのホームページによると
Mirah は、コンパイル時のメタプログラミングとマクロのさまざまなメカニズムをサポートしています。Mirah では、動的言語の「オープン クラス」の感覚の多くが可能です。
しかし、私は詳細を見つけることができません。誰か詳しい情報を持っていますか?
Mirahのホームページによると
Mirah は、コンパイル時のメタプログラミングとマクロのさまざまなメカニズムをサポートしています。Mirah では、動的言語の「オープン クラス」の感覚の多くが可能です。
しかし、私は詳細を見つけることができません。誰か詳しい情報を持っていますか?
Mirah はコンパイル時マクロをサポートしています。それらを使用して、構文ツリーを変更するコンパイル時に実行される関数を定義できます。これにより、Java で見られる一般的なパターンの一部を、Ruby で見られるものに似たものに単純化できます。
たとえば、times
はマクロとして実装されていますが、現在は Mirah ではなく Ruby で記述されています。
こんな感じで使えます
5.times do |i|
puts i
end
0~4の数字を出力する
Javaでは、次のようになります
for(int i=0;i < 5; i++) {
System.out.println(i);
}
もちろん、マクロを使用して独自のマクロを定義することもできますmacro def
。たとえば、デバッグ文字列を作成する前に、デバッグが有効かどうかをチェックする一般的な logger4j パターンを使用したいとします。マクロを使用すると、次のようにしてチェックを暗黙的に行うことができます。
macro def debug debug_input
quote do
if logger.debugEnabled
logger.debug `debug_input`
end
end
end
私はこのように呼び出すことができます
debug "something low level is going on: " + gimme_all_the_bytes_as_a_string
そこで何が起こっているのかというと、 を使用して構文ツリーの一部を作成し、Mirah マクロのクォート ブロックで構文ツリー ノードの引用符を外す ``s を使用して式をそこにquote do ... end
ドロップしています。"something low level is going on: " + gimme_all_the_bytes_as_a_string
現在、Mirah の仕組みに関するリソースはあまり多くありませんが、Githubでサンプル コードを確認できます。さらに質問がある場合は、お気軽にメーリング リストにメールを送信してください。