2011-11-30 37 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 ..