2011-11-30 34 views
2

使用方法由于我有两个对象lower和相同类型的upper和它们返回使用方法succ连续值(如在红宝石),并且可以使用<进行比较。周期中的CoffeeScript

在普通的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() 

有什么更短的吗?

+0

我认为这应该是'while while i

+1

或者,因为[Prototype的$ R默认包含](http://prototypejs.org/api/utility/dollar-r),所以'for'应该有'i <= upper'来制作所有的代码片段当量。 –

+0

你是对的,谢谢。 – tig

回答

1

我认为你是正确的,

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

是写这个,而无需使用功能的最短途径。当然,你可以写这样的功能,而无需使用原型:

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

然后就可以调用它像这样:

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

是的,但我真的很喜欢CoffeeScript允许编写不需要使用匿名函数的短代码(有时还需要绑定)。 – tig

0

如何:

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

试试吧here,为我使用了以下夹具的例子:

upper = 3 
lower = 0 

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

i = succ: counter(lower) 

/我仍然希望广泛使用generator支持Javascript ..