Есть ли способ иметь изменяемые аргументы функции в F #, который позволял бы что-то вроде
let mutable i = 9
let somefun n = n <- 12; ()
somefun i
(* *not* a real-world example *)
Я понимаю, что это можно сделать, обернув его в тип записи
type SomeRec = { mutable i: int }
let ri = { i = 9 }
let someotherfun r = r.i <- 12; ()
и что это можно сделать аналогичным образом для учеников.Тем не менее, даже после просмотра всей спецификации языка F # (да, я сделал!), Кажется, нет никакого синтаксиса, чтобы разрешить первый случай, и компилятор, похоже, очень недоволен моей попыткой сделать это.Я надеялся, что будут какие-то аннотации типов, но в таких случаях нельзя использовать mutable.
Я также знаю, что я не должен делать такие вещи в первую очередь, но в первом случае (int
обязательный) и второй (record
тип) семантически идентичны, и любое такое возражение будет одинаково справедливо для обоих случаев.
Так что я думаю, что здесь что-то не хватает.