Coffeescript 中的函数不能被提升,因为它没有函数声明,只有函数表达式。如何编写一个宏来向咖啡脚本添加函数声明?
具体来说,我想要:
foo(bar, baz) ->
编译为:
function foo(bar, baz) {
}
代替:
foo(bar, baz)(function() {});
Coffeescript 中的函数不能被提升,因为它没有函数声明,只有函数表达式。如何编写一个宏来向咖啡脚本添加函数声明?
具体来说,我想要:
foo(bar, baz) ->
编译为:
function foo(bar, baz) {
}
代替:
foo(bar, baz)(function() {});
我认为你不能这样做,除非你想用foo
JavaScript 编写并使用反引号将它嵌入到你的 CoffeeScript 中。例如:
console.log f 'x'
`function f(x) { return x }`
变成这个 JavaScript:
console.log(f('x'));
function f(x) { return x };
并将f
根据需要执行。
如果您想更改 CoffeeScript 的解释方式foo(bar, baz) ->
,则必须编辑解析器并处理所有副作用和损坏的代码。结果将类似于 CoffeeScript,但不会是 CoffeeScript。
CoffeeScript 和 JavaScript 是不同的语言,在你用 JavaScript 术语思考的同时尝试编写 CoffeeScript 只会把事情弄得一团糟;它们有很多共同点,CoffeeScript 被编译/翻译成 JavaScript,但它们不是同一种语言,所以你可以以不同的方式使用它们。不要用 C++ 编写 C 代码,不要用 Scala 编写 Java,不要用 CoffeeScript 编写 JavaScript,...
我真的不确定你试图完成什么,但最接近你想要的是这个
func = (name) ->
(body) ->
window[name] = body
func("foo") (arg)-> console.log(arg)
foo("lala") #prints lala
我还建议保留 CoffeeScript 语法,一个“宏”来纠正像函数声明这样重要的事情必然会造成混乱。特别是当你没有赢得任何东西时——恰恰相反。