2013-06-24 64 views
0
執行的

我有下面這段代碼:程序OCaml中

let p = print_string("finished\n");; 

let x0 = ref 0;; 

class point = 
    object 
    val mutable x = incr x0; !x0 
    method get_x = x 
    method move d = x <- x + d 
    end 
;; 

print_int(new point#get_x);; 
p;; 
print_int(new point#get_x);; 
p;; 

不明白爲什麼輸出是:

finished 
12 

我的期望其實是這樣的:

1 
finished 
2 
finished 

任何人都可以知道執行這段代碼的正確順序是什麼?

回答

5

混淆的主要問題是您的p不是一個函數。這只是一個價值。尤其值爲()(稱爲單位)。因此,當您在代碼中稍後評估p時,它不起作用。所有的工作都是在創建p時完成的。

如果你想p來像一個功能(這是你彷彿想),你應該把它定義是這樣的:

let p() = print_string "finished\n";; 

你應該稱呼它:

p();;