2015-10-20 2 views
0

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

macro test1 { 
    case { _ $x 
    } => { 
     var n = n ? n+1 : 0; 
     letstx $n = [makeValue(n,#{here})]; 
     return #{ 
      $n; 
     } 
    } 
} 

test1() 
test1() 

урожайности:

0; 
0; 

когда то, что я хочу это:

0; 
1; 

Как я должен определить n как глобальную переменную, чтобы я мог увеличивать и сохранять ее значение вне макроса?

Update:

я могу заставить его работать, изменяя присвоение n к Eval, но это на самом деле чувствует, как обман:

var n = eval("if (typeof n != 'undefined') n++; else n=0; n") 
+0

Что вы хотите достичь, это не то, что Sweet.js входит в MHO. На самом деле вам не нужен Sweet.js в этом случае. Это может быть достигнуто с помощью чистого JS, как указано в потоке [здесь] (http://stackoverflow.com/questions/1535631/static-variables-in-javascript). – Season

+0

Если у вас есть доступ к глобальному объекту, например «окно», вы можете использовать это, добавив к объекту окна свойство, такое как «n». – Don

+0

@Season Это просто упрощенная тестовая версия. Мне действительно нужно sweet.js для его макрорасширения. – Michael

ответ

1

В настоящее время (есть планы сделать это лучше) вы можете просто использовать глобальный объект:

macro test1 { 
    case { _ $x 
    } => { 
     window.n = typeof window.n !== 'undefined' ? window.n+1 : 0; 
     letstx $n = [makeValue(n,#{here})]; 
     return #{ 
      $n; 
     } 
    } 
} 

test1() 
test1() 
+0

Я не думаю, что использование 'window' переносится ... но я просто попробовал быстрый эксперимент, и кажется, что я могу просто использовать« n »самостоятельно (без определения его как var), и он будет отображаться в глобальном Окружающая среда. – Michael

+1

Правда. Если вы хотите быть явным, я думаю, что 'this.p' должен работать везде. – timdisney

Смежные вопросы