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