SweetJS:为特定库编写宏

时间:2015-03-21 14:25:03

标签: macros sweet.js ramda.js

我目前正在开展一个小项目,其中包括为Ramda编写宏。这是一个例子:

let map = macro {
    rule { $f $array } => { R.map($f, $array) }
    rule { $f } => { R.map($f) }
}

我尝试将这个简单的代码示例编译为开头:

var R = require('ramda');

function log (value) {
    console.log(value);
}

map log [1, 2, 3];

由于卫生,编译后的代码如下所示:

var R$759 = require('ramda');
function log$761(value$762) {
    console.log(value$762);
}                   
R.map(log$761)[1, 2, 3];

我的问题是我不知道如何引用ramda。

是否有人尝试为特定库编写宏并遇到此问题?

1 个答案:

答案 0 :(得分:2)

目前,做到这一点的方法有点笨拙。在下一个版本中,当我们获得ES6模块时,实际上会自动为您处理,但在此之前,最好的选择是使用初始化宏(这是kicontracts.js所做的事情)。这可以通过在所有宏的范围内使用共享变量,然后让用户首先调用执行必要import的{​​{1}}宏来实现:

require