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

混乱の主なポイントは、 yourpが関数ではないということです。それは単なる値です。特に、それは値()(単位として知られています) です。したがって、p後でコードを評価しても効果はありません。p が作成されたときに、すべての作業が完了しました。

p を関数のように動作させたい場合 (これが必要なようです)、次のように定義する必要があります。

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

そして、次のように呼び出す必要があります。

p ();;
于 2013-06-24T17:05:02.233 に答える