在CoffeeScript中立即调用的函数

9

有人能向我展示如何立即调用CoffeeScript中的函数吗?我正在尝试实现类似于此JS对象文字的功能。

WEBAPP = {
    maxHeight : function(){
        /* Calc stuff n' stuff */
        WEBAPP.maxHeight = /* Calculated value */
    }(),
    someProperty : ''
    /* ... */        
}

这是可能的,或者有什么解决方法吗?
3个回答

20

这里有一个do

WEBAPP = 
  maxheight: do -> 1+1
  someProperty: ''

编译成:

var WEBAPP;

WEBAPP = {
  maxheight: (function() {
    return 1 + 1;
  })(),
  someProperty: ''
};

如果这听起来很奇怪,(-> 1+1)()将和do -> 1+1做同样的事情。 - Aaron Dufour

2

如果有其他人看到这个问题,你还可以将do关键字与默认函数参数结合使用,为递归的“立即调用函数”提供初始值。例如:

do recursivelyPrint = (a=0) ->
  console.log a
  setTimeout (-> recursivelyPrint a + 1), 1000

1

你为什么不试一下这样的方法呢?

square = (x) -> x * x

WEBAPP = {
   maxHeight: square(3),
   someProperty: ''
}

更新

顺便说一下:这是另一种解决方法

WEBAPP = {
   maxHeight: (() -> 
       1 + 2
   )()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接