将sweet.js参数转换为字符串

时间:2014-02-18 05:54:31

标签: sweet.js

如何从参数创建一个字符串到sweet.js宏?例如:

let foo = macro {
    rule {
        $name
    } => {
        console.log('$name', $name);
    }
}

var x = 42;

foo x

将输出:

console.log(x, x);

当我更喜欢输出时:

console.log('x', x);

所以第一个参数引用了它。

1 个答案:

答案 0 :(得分:5)

您可以使用案例宏:

let foo = macro {
    case {_
        $name
    } => {
        letstx $name_str = [makeValue(unwrapSyntax(#{$name}), #{here})];
        return #{
            console.log($name_str, $name);
        }
    }
}

var x = 42;

foo x

基本思想是你使用makeValue所管理的标识符的字符串值创建一个新的字符串标记(通过$name)(unwrapSyntax为我们提供给定语法的值对象,在标识符的情况下,它是标识符字符串)。然后letstx允许我们绑定新创建的语法对象,以便在#{}模板中使用。