0

我正在尝试创建一个宏,每次调用时都会将递增值扩展到输出中。到目前为止,我已经得到了这个,但它每次都将值重新初始化为 0:

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

test1 ()
test1 ()

产量:

0;
0;

当我想要的是:

0;
1;

如何定义n为全局变量,以便我可以在宏之外递增和保留其值?

更新:

我可以通过将分配更改n为 eval 来使其工作,但这真的感觉像是在作弊:

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

1 回答 1

1

目前(有计划让它更好)你可以只使用全局对象:

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

test1 ()
test1 ()
于 2015-10-20T16:52:44.090 回答