tldr-再び; CoffeeScript の作成者は、私が正しいと言ったところです。使用しないでください_i
。
14:29 <jashkenas> You shouldn't use internal variables.
...
14:42 <meagar> I was hoping something more deeply involved in the language would be able to put some authority behind that opinion
14:43 <meagar> ... I was basically hoping for an authoritative "don't do that"
14:44 <jashkenas> you just got it ;)
14:44 <jashkenas> for item, index in list -- there's your reference to the index.
tldr; これはせいぜい、機能的に同等の文書化された機能が存在する文書化されていない機能です。そのため、使用しないでください。
「タイピングが少ない」というあなたの主張は非常に疑わしいです。比較:
for x in [1, 2, 3] when _i % 2 == 0
console.log "#{_i} -> #{x}"
for x,i in [1, 2, 3] when i % 2 == 0
console.log "#{i} -> #{x}"
機能、バグ、または NaN?
これらのどれもありません。それは未定義の動作です。コンパイルされた JavaScript の反復に使用される変数になると想定しています。_i
絶対に使用しないでください。または、が定義される_i
と想定してください。_i
これは実装の詳細であり、いつでも自由に変更できます。ループが別のループにネストされている場合もそうではありません。 またはなど_i
になります。_j
_k
最も重要なことは、基盤となる実装の JavaSript 変数に依存することなく、これとまったく同じことを実行できることです。インデックスでループしたい場合は、次を使用してfor value,key in array
ください。
array = ['a', 'b', 'c']
console.log(index) for item, index in array # 0, 1, 2
具体的には、あなたの例では:
feast = (cats) -> eat cat for cat, index in cats when index % 2 == 0