我正在寻找一种在ocaml中定义全局变量的方法,这样我就可以在程序中更改它们的值。我想使用的全局变量是:
type state = {connected : bool ; currentUser : string};;
let currentstate = {connected = false ; currentUser = ""};;
如何更改connected和currentUser的值,并将新值保存在整个程序的同一变量currentstae中?
要么声明一个可变记录类型:
type state =
{ mutable connected : bool; mutable currentUser : string };;
或者声明一个全局参考
let currentstateref = ref { connected = false; currentUser = "" };;
(然后用!currentstateref.connected
访问…)
两者都做不同的事情。可变字段可以进行变异(例如state.connected <- true;
……但包含它们的记录保持相同值)。引用可以更新(它们"指向"一些较新的值)。
你需要花几个小时来阅读更多你的Ocaml书(或其参考手册)。我们没有时间教你大部分。
参考真的很像
type 'a ref = { mutable contents: 'a };;
但具有用于去引用(!
)和更新(:=
)
type state={connected:bool;currentUser:string};;让currentstate={connected=false;currentUser="};;
可以翻译为:
type state = {connected : bool ref ; currentUser : string ref };;
let currentstate = {connected = ref false ; currentUser = ref ""};;
分配值:
(currentstate.connected) := true ;;
- : unit = ()
获取值:
!(currentstate.connected) ;;
- : bool = true
您还可以对其内容进行模式匹配。
在此处阅读更多关于ref的信息