let mutable x =
[| 1; 2; 3; 4; 5; 2; 3; 5; 6; 3; |] let to_null = for i in 0..9 dox.[i] <- 0
загоняем его в интерпретатор и получаем соотв.:
val mutable x : int [] = [|0; 0; 0; 0; 0; 0; 0; 0; 0; 0|]
val to_null : unit = ()
Всё правильно, всё логично.
А теперь снова засунем в интерпретатор x:
val mutable x : int [] = [|1; 2; 3; 4; 5; 2; 3; 5; 6; 3|]
и вызовет to_null:
> to_null;;
val it : unit = ()
> x;;
val it : int [] = [|1; 2; 3; 4; 5; 2; 3; 5; 6; 3|]
Поэтому следует быть осторожным при работе с mutable привязками в интерпретаторе и, по крайней мере, перезагружать их при каждой загрузке кода в fsi.
Есть один массив x, с которым работает функция to_null, а потом появляется другой массив, но to_null, конечно же, всё ещё использует тот самый первый x, так как на него и была изначально завязана.
ОтветитьУдалитьЯ бы объяснял это так :)