Конкатенация синтаксического объекта в sweet.js

Я хотел бы создать макрос в sweet.js, который позволяет пользователю писать циклы в javascript, используя что-то похожее на индексную нотацию, используемую в тензорном исчислении. Если я поставлю что-то вроде:

tensor foo[i][j] = baz[j] + bar[i];

sweet.js расширит его до:

var i, j, li, lj;
for(i=0, li=bar.length; i<li; ++i){
    for(j=0, lj=baz.length; j<lj; ++j){
        foo[i][j] = baz[j] + bar[i];
    }
}

У меня есть рабочая копия, которая не использует li а также lj переменные, т.е. проверяет, i<bar.length а также j<baz.length, Это влияет на производительность больших массивов, и я хотел бы отойти от этого.

Проблема в том, что мне нужно создать li а также lj переменные. Я хочу взять i а также j токены и объедините их в "l", чтобы создать новый токен. Я не могу найти способ объединить токены в sweet.js, как, например, в препроцессоре cpp с использованием ## оператор. Я понимаю, что sweet.js пытается быть гигиеничным в отличие от препроцессора cpp, поэтому я не уверен, что это упущение было задумано. Я что-то пропустил? Это ограничение, накладываемое sweet.js? Если это так, есть ли обходной путь?

Я использую последнюю версию sweet.js, версия 2.0. Это та же версия, которую использует их онлайн-редактор.

0 ответов

Другие вопросы по тегам