問題
一見したところ、深刻なバグがなければマクロを適切にネストすることはできません。
主な問題は、データ オブジェクトからマクロの値を取得すると、この値がリストにネストされることです。
a[X] -> $X {% id %}
main -> a["test"] {% id %}
Parse results:
[ [ 'test' ] ]
期待される結果は です[ 'test' ]
。
簡単な修正は data[0][0] を返すことですが、結果がマクロのレイヤーごとにネストされるため、それだけでは不十分です。
a[X] -> b[$X] {% id %}
b[X] -> $X {% id %}
main -> a["test"] {% id %}
Parse results:
[ [ [ 'x' ] ] ]
バグを修正するdata => data[0][0]
ために、各マクロに使用できます。しかし、これは絶対に醜いです。
本当の解決策は、動的スコープを使用することです。(私の知る限り) パラメーターなしでマクロを作成することはできないため、役に立たないパラメーターを使用しましょう。
a[X] -> b["_"] {% id %}
b[_] -> $X {% id %}
main -> a["test"] {% id %}
Parse results:
[ [ 'test' ] ]
これにより、以前に発生したネスティング地獄が停止します。500 のサブマクロを通過しても、同じ結果が得られます。しかし、最後の sub-macro に data[0][0] を配置する必要があります。b
これにより、b
マクロを単独で使用a
することができなくなります。これを機能させるには、使用する必要があります。
- 最後のマクロを単独で使用できるようにする - data => data[0][0] の使用を避ける