在OCaml中执行的过程
我有以下代码:在OCaml中执行的过程,ocaml,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;;
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;;
我的期望实际上是:
1
finished
2
finished
任何人都可以知道执行这段代码的正确顺序是什么?主要的混淆点是您的
p
不是一个函数。这只是一个价值。特别是,它是值()
(称为单位)。因此,当您稍后在代码中评估p
时,它没有效果。所有的工作都是在创建p时完成的
如果您想让p像一个函数一样工作(这似乎是您想要的),您应该这样定义它:
let p () = print_string "finished\n";;
p ();;
你应该这样称呼它:
let p () = print_string "finished\n";;
p ();;
主要的混淆点是你的
p
不是一个函数。这只是一个价值。特别是,它是值()
(称为单位)。因此,当您稍后在代码中评估p
时,它没有效果。所有的工作都是在创建p时完成的
如果您想让p像一个函数一样工作(这似乎是您想要的),您应该这样定义它:
let p () = print_string "finished\n";;
p ();;
你应该这样称呼它:
let p () = print_string "finished\n";;
p ();;