びったんびったん

ユーザビリティ・プログラミングについて。

クロージャではまったのでメモ

クロージャではまるのは C# に続き CoffeeScript で2度目なのでメモ。

やりたかったこと

4つのクロージャに0、1、2、3のそれぞれを束縛したかった。

間違い

f() for f in ((-> console.log i) for i in [0...4])
# 4
# 4
# 4
# 4

CoffeeScript の性質上仕方のないことで変数のスコープが大変わかりづらいが、すべてのクロージャが同じ変数を束縛している。そのため同じ数が束縛されてしまった。

正解

f() for f in ((do (i) -> -> console.log i) for i in [0...4])
# 0
# 1
# 2
# 3

クロージャを作るときに即時関数を使って変数を新たに宣言し、その変数を束縛している。うまくいった。

まとめ