1

下面是两个例子,它们非常简化,这种简化形式没有实际意义,但它会帮助我理解使用这两个例子是如何工作的:

let test x = object (self)
  val x = x
  method testme = x == self
end in
Printf.printf "printme: %b\n" (test test)#testme;;

let test x = object
  method testme = (==) x
end in
Printf.printf "printme: %b\n" ((test test)#testme test);;

第一个例子不起作用,而第二个例子起作用。第一个争论类型 ofxtest不兼容,但我不明白它是如何得出 type of 的结论x< testme : bool > -> < testme : bool >。为什么不只是< testme : bool >

4

1 回答 1

2

这是我看到的:

# let test x = object (self) method testme = x == self end;;
val test : < testme : bool > -> < testme : bool > = <fun>

事实上,test是一个函数而不是一个对象。它具有基本 OCaml 函数定义的形式。你说那x是一个函数,x其实是函数的参数test。所以 的类型x< testme: bool >

于 2013-05-03T14:59:03.020 回答