2

次のCoffeeScriptコード:

for a in arr
  do_something_with arr.length

コンパイルされます:

var a, _i, _len;

for (_i = 0, _len = arr.length; _i < _len; _i++) {
  a = arr[_i];
  do_something_with(arr.length); // I want to use '_len' here
}

arr.lengthすべての反復で計算するのではなく、のキャッシュ値を使用することは可能ですか?

4

2 に答える 2

3

範囲配列ではなく定義済み配列がある場合は、実際にはブロックで_lenを使用できます。

for a in arr
  _len == arr.length

ただし、これはCS内部に依存しており、新しいバージョンで変更される可能性があります。また、すべてのアレイで機能するわけではありません。

arr = [0..10]
for a in arr
  #this works
  console.log _len

しかし:

for a in [0..10]
  #this doesn't work
  console.log _len

配列の長さのキャッシュバージョンを使用する場合は、CSの内部変数名に依存せずに、コードで明示的に使用することをお勧めします。

むしろする:

arrLength = arr.length
for a in arr
   doSomethingWith arrLength
于 2012-05-16T07:34:12.047 に答える
2

検討?

for i in [0...len = arr.length]
  a = arr[i]
  do_something_with len
于 2012-05-16T11:56:25.510 に答える