我正在尋找一種方法來在ocaml中定義全局變量,以便我可以在程序中更改它們的值。我想用戶的全局變量是:Ocaml中的全局變量
type state = {connected : bool ; currentUser : string};;
let currentstate = {connected = false ; currentUser = ""};;
如何變更連接和currentUser的價值,並在同一個變量currentstae保存新的價值,爲整個程序?
我正在尋找一種方法來在ocaml中定義全局變量,以便我可以在程序中更改它們的值。我想用戶的全局變量是:Ocaml中的全局變量
type state = {connected : bool ; currentUser : string};;
let currentstate = {connected = false ; currentUser = ""};;
如何變更連接和currentUser的價值,並在同一個變量currentstae保存新的價值,爲整個程序?
要麼宣佈一個可變記錄類型:
type state =
{ mutable connected : bool; mutable currentUser : string };;
或宣佈全球參考
let currentstateref = ref { connected = false; currentUser = "" };;
(然後用!currentstateref.connected
訪問它...)
兩種做不同的事情。可變字段可以進行變異(例如state.connected <- true;
...但包含它們的記錄保持相同的值)。參考文獻可以更新(他們「指向」一些新的價值)。
您需要花費數小時才能閱讀更多您的Ocaml書籍(或其reference manual)。我們沒有時間把大部分時間教給你。
的參考文獻是非常喜歡
type 'a ref = { mutable contents: 'a };;
但語法糖(即綴功能),用於非關聯化(!
)和更新(:=
)
我不會認爲'!'和':='是語法糖,它們只是普通的函數。 –
類型狀態= {連接:BOOL; currentUser:string} ;; let 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
其內容你也可以模式匹配。
閱讀更多關於參考here
閱讀更多關於Ocaml的更多信息。你錯過了基礎知識! –
我不認爲有反對提出簡單問題的政策,這裏的帖子[1]指出簡單的問題是可以的。問題很清楚,你甚至可以回答。它不值得投票或你的意見表明它不應該被問到。 [1] http://meta.stackexchange.com/questions/3251/closing-easy-questions-yes-or-no –
這是不可能分配給ML中的變量。 – newacct