2013-06-24 33 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();;