2

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

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

var x = 42;

foo x

将输出:

console.log(x, x);

当我希望它输出时:

console.log('x', x);

所以第一个参数有引号。

4

1 回答 1

5

您可以使用 case 宏:

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

var x = 42;

foo x

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

于 2014-02-18T21:44:58.303 回答