9
Ja próbuje napisać jakiś prosty kod w F #, a ja dostać ten błąd:Zmienna zmienna "i" jest używana w nieprawidłowy sposób.?
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 '!'
Kod:
let printProcess = async {
let mutable i = 1;
while true do
System.Console.WriteLine(i);//error is here
i <- i + 1;
}
Dlaczego nie będzie to niech mi drukować zmienną?
Krótka odpowiedź, dlaczego musisz to zrobić, to że wartości "zmienne" znajdują się na stosie, a wartości "ref" znajdują się na stercie. Ponieważ ramka stosu zostanie wyczyszczona, gdy tylko funkcja wyjdzie, wszystkie zmienne wartości zostaną odzyskane. Wartości ref z drugiej strony będą zachowywać się tak, jak każdy inny obiekt zebrany na śmieci. –
Innym sposobem na stwierdzenie, że F # przechwytuje wartości, a nie zmienne. Z tego powodu przechwytywanie wartości zmiennej zmiennej byłoby takie samo jak uchwycenie wartości niezmiennych zmiennych, ponieważ sama wartość jest zawsze niezmienna. Takie zachowanie prawdopodobnie nie jest zgodne z oczekiwaniami ludzi i dlatego było zabronione. – Joh