2013-12-10 45 views
3

我正在尋找一種方法來在ocaml中定義全局變量,以便我可以在程序中更改它們的值。我想用戶的全局變量是:Ocaml中的全局變量

type state = {connected : bool ; currentUser : string};; 
let currentstate = {connected = false ; currentUser = ""};; 

如何變更連接和currentUser的價值,並在同一個變量currentstae保存新的價值,爲整個程序?

+1

閱讀更多關於Ocaml的更多信息。你錯過了基礎知識! –

+1

我不認爲有反對提出簡單問題的政策,這裏的帖子[1]指出簡單的問題是可以的。問題很清楚,你甚至可以回答。它不值得投票或你的意見表明它不應該被問到。 [1] http://meta.stackexchange.com/questions/3251/closing-easy-questions-yes-or-no –

+1

這是不可能分配給ML中的變量。 – newacct

回答

2

要麼宣佈一個可變記錄類型:

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 };; 

但語法糖(即綴功能),用於非關聯化(!)和更新(:=

+1

我不會認爲'!'和':='是語法糖,它們只是普通的函數。 –

0

類型狀態= {連接: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