使用CoffeeScript中的循环方法

时间:2011-11-30 14:27:33

标签: for-loop coffeescript prototypejs

鉴于我有两个相同类型的对象lowerupper,并且它们使用方法succ返回连续值(如在ruby中),并且可以使用<进行比较。

在简单的javascript中我可以写:

for (var i = lower; i <= upper; i = i.succ()) {
  // …
}

使用原型我可以写得更短:

$R(lower, upper).each(function(i){
  // …
}, this)

在coffeescript中使用原型我可以写得更短:

$R(lower, upper).each (i)->
  # …
, this

但是没有原型,我发现只有这样才能做同样的事情:

i = lower
while i <= upper
  # …
  i = i.succ() 

还有什么更短的吗?

2 个答案:

答案 0 :(得分:1)

我认为你是对的

i = lower
while i < upper
  # …
  i = i.succ()

是在不使用函数的情况下编写此函数的最短方法。当然,你可以在不使用Prototype的情况下编写这样的函数:

eachSucc = (lower, upper, func) ->
  i = lower
  while i < upper
    func i
    i = i.succ()

然后你可以这样称呼它:

eachSucc lower, upper, (i) -> ...

答案 1 :(得分:0)

怎么样:

while upper >= n = i.succ()
  alert n

试试here,对于我使用以下灯具的例子:

upper = 3
lower = 0

counter = (l) ->
  _ = l
  -> _++

i = succ: counter(lower)

/我仍然希望在Javascript中提供广泛的generator支持..