проблема
На первый взгляд, макросы не могут быть правильно вложены без серьезных ошибок.
Основная проблема заключается в том, что при извлечении значения макроса из объекта данных это значение вкладывается в список:
a[X] -> $X {% id %}
main -> a["test"] {% id %}
Parse results:
[ [ 'test' ] ]
Ожидаемый результат будет [ 'test' ]
.
Быстрое решение - вернуть данные [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 суб-макросов и все равно получить тот же результат. Но нам все еще нужно поместить data [0] [0] для окончательного под-макроса b
, и это мешает нам использовать сам макрос b
- мы должны использовать a
для его работы.
Мы ищем решение, которое:
- Позволяет использовать последний макрос самостоятельно
- Избегает использования данных => данных [0] [0]