0

Coffeescript 中的函数不能被提升,因为它没有函数声明,只有函数表达式。如何编写一个宏来向咖啡脚本添加函数声明?

具体来说,我想要:

foo(bar, baz) ->

编译为:

function foo(bar, baz) {
}

代替:

foo(bar, baz)(function() {});
4

2 回答 2

0

我认为你不能这样做,除非你想用fooJavaScript 编写并使用反引号将它嵌入到你的 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,...

于 2013-07-04T20:13:06.833 回答
-1

我真的不确定你试图完成什么,但最接近你想要的是这个

func = (name) ->
    (body) ->
        window[name] = body

func("foo") (arg)-> console.log(arg)

foo("lala") #prints lala

我还建议保留 CoffeeScript 语法,一个“宏”来纠正像函数声明这样重要的事情必然会造成混乱。特别是当你没有赢得任何东西时——恰恰相反。

于 2013-07-04T22:15:18.413 回答