I am looking for a way to define global variables in ocaml so that i can change their value inside the program. The global variable that I want to user is:
type state = {connected : bool ; currentUser : string};;
let currentstate = {connected = false ; currentUser = ""};;
How can I change the value of connected and currentUser and save the new value in the same variable currentstae for the whole program?
Either declare a mutable record type:
type state =
{ mutable connected : bool; mutable currentUser : string };;
Or declare a global reference
let currentstateref = ref { connected = false; currentUser = "" };;
(then access it with !currentstateref.connected
...)
Both do different things. Mutable fields can be mutated (e.g. state.connected <- true;
... but the record containing them stays the same value). References can be updated (they "points to" some newer value).
You need to take hours to read a lot more your Ocaml book (or its reference manual). We don't have time to teach most of it to you.
A reference is really like
type 'a ref = { mutable contents: 'a };;
but with syntactic sugar (i.e. infix functions) for dereferencing (!
) and updating (:=
)
type state = {connected : bool ; currentUser : string};; let currentstate = {connected = false ; currentUser = ""};;
can be translated to :
type state = {connected : bool ref ; currentUser : string ref };;
let currentstate = {connected = ref false ; currentUser = ref ""};;
to assign value :
(currentstate.connected) := true ;;
- : unit = ()
to get value :
!(currentstate.connected) ;;
- : bool = true
you can also pattern match on its content.
read more about ref here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With