1

我有以下代码:

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

任何人都可以说出执行这段代码的正确顺序是什么?

4

1 回答 1

5

主要的混淆点是你p不是一个函数。这只是一个值。特别是,它是值()(称为单位)。因此,当您稍后在代码中进行评估时p,它没有任何效果。所有工作都是在创建 p 时完成的。

如果你想让 p 像一个函数一样工作(这就是你想要的),你应该像这样定义它:

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

你应该这样称呼它:

p ();;
于 2013-06-24T17:05:02.233 回答