Coffeescript中的函数不能被提升,因为它不起作用声明,只起作用函数表达式。如何编写宏来向coffeescript添加函数声明?
具体来说,我想:
foo(bar, baz) ->
编译为:
function foo(bar, baz) {
}
而不是:
foo(bar, baz)(function() {});
答案 0 :(得分:0)
除非您想在JavaScript中编写foo
并使用反引号将其嵌入到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是不同的语言,尝试编写CoffeeScript而你在用JavaScript术语思考时会弄得一团糟;他们分享了很多,CoffeeScript被编译/翻译成JavaScript,但它们不是同一种语言,所以你用不同的方式处理它们。不要用C ++编写C代码,不要在Scala中编写Java,不要在CoffeeScript中编写JavaScript,...
答案 1 :(得分:-1)
我真的不确定你想要完成什么,但最接近你想要的是这个
func = (name) ->
(body) ->
window[name] = body
func("foo") (arg)-> console.log(arg)
foo("lala") #prints lala
我还建议继续使用CoffeeScript语法“宏”,纠正这样一个重要的事情,如函数声明必然会造成混淆。特别是因为你没有赢得任何东西 - 恰恰相反。