9
私はF#でいくつかの簡単なコードを書き込もうとしています、と私はこのエラーを取得:可変変数 'i'は無効な方法で使用されます。
Error 1 The mutable variable 'i' is used in an invalid way. Mutable variables may not be captured by closures. Consider eliminating this use of mutation or using a heap-allocated mutable reference cell via 'ref' and '!'
コード:
let printProcess = async {
let mutable i = 1;
while true do
System.Console.WriteLine(i);//error is here
i <- i + 1;
}
なぜそれは私が変数を印刷させないのだろうか?
なぜこれを行う必要があるのかの簡単な答えは、スタック上に '可変'値があり、 'ref'値がヒープ上にあることです。関数が終了するとすぐにスタックフレームがクリアされるので、変更可能な値はすべて再利用されます。もう一方のRef値は、他のガベージコレクションオブジェクトと同様に維持されます。 –
これを置く別の方法は、F#が変数ではなく値を取得するということです。このため、変更可能な変数の値を取り込むことは、値自体が常に不変であるため、不変の変数の値を取り込むことと同じになります。この行動はおそらく人々が期待するものではなく、したがって禁止されています。 – Joh