sweet.js 替换这个。和 @
sweet.js replace this. with @
我想用咖啡脚本中的 @
符号替换 this.
。我写了宏:
macro (@) {
case { return $a } => { return this.$a }
}
function LogSmth(name) {
this.name = name;
console.log(@name);
}
但是得到了
SyntaxError: [macro] Macro `@` could not be matched with `name...`
57: console.log(@name);
如何解决这个问题?
个案必须return一个语法数组。因此,您可以通过执行以下操作来修复您的问题:
macro @ {
case { _ } => { return #{ this. } }
}
或者您可以使用不使用任何模式的简单 rule 生成此文件。
macro @ {
rule {
} => {
this.
}
}
请允许我扩展 Mike C 的回答。如果我们尝试只用 @
做一些事情会发生什么(一个常见的操作是将一个对象绑定到 this
)。有人可能会这样写:X.bind(@, ...)
但是上面的宏会失败。另一种可能性是能够做到这一点:@['some property with a weird name']
,但是上面的宏也会失败。
这是我的版本:
macro @ {
rule { [$x:expr] } => { this[$x] }
rule { $x:ident } => { this.$x }
rule {} => { this }
}
这也公开了一个有用的 属性 关于将规则应用于宏的规则,即顺序很重要。
我想用咖啡脚本中的 @
符号替换 this.
。我写了宏:
macro (@) {
case { return $a } => { return this.$a }
}
function LogSmth(name) {
this.name = name;
console.log(@name);
}
但是得到了
SyntaxError: [macro] Macro `@` could not be matched with `name...`
57: console.log(@name);
如何解决这个问题?
个案必须return一个语法数组。因此,您可以通过执行以下操作来修复您的问题:
macro @ {
case { _ } => { return #{ this. } }
}
或者您可以使用不使用任何模式的简单 rule 生成此文件。
macro @ {
rule {
} => {
this.
}
}
请允许我扩展 Mike C 的回答。如果我们尝试只用 @
做一些事情会发生什么(一个常见的操作是将一个对象绑定到 this
)。有人可能会这样写:X.bind(@, ...)
但是上面的宏会失败。另一种可能性是能够做到这一点:@['some property with a weird name']
,但是上面的宏也会失败。
这是我的版本:
macro @ {
rule { [$x:expr] } => { this[$x] }
rule { $x:ident } => { this.$x }
rule {} => { this }
}
这也公开了一个有用的 属性 关于将规则应用于宏的规则,即顺序很重要。