sweetjs补充说:''

时间:2014-02-11 10:37:07

标签: javascript node.js sweet.js

我正在尝试编写一个带有sweetjs的宏来自

{a,b,c}

{a:'',b:'',c:''}

基本上我想列出一个对象的属性,并创建一个具有该属性的空原型。

我写的规则是

macro basic {
  rule { { $x (,) ... } } => {
    {($x = 3)(,) ...}
  }
}

如果我有

basic { a, b, c }

它扩展到

  

{a = 3,b = 3,c = 3;}

但如果我更改了= 3中的: ''

  

意外的令牌:[...(a :),...]

(另外我不知道为什么在;之后的扩展结束时添加c = 3

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

好的我已经以不同的方式解决了,因为我不知道如何使用:(因为它是用于指定令牌类型的特殊字符)我使用了一个临时变量:

macro basic {
  rule { { $x (,) ... } } => {
    var tmp = {};
    (tmp [toString $x] = undefined)(;)
    ... 
  }
 }

答案 1 :(得分:1)

您需要使用$()而不是裸露的parens来将键值对读取为单个重复模式。

macro basic {
  rule { { $x (,) ... } } => {
    { $($x: 3) (,) ... }
  }
}

值得注意的是,这不是一个需要宏的情况。一个普通的函数可以很容易地做到这一点 - 你只需要使用parens而不是花括号和字符串而不是裸标识符。