下面是两个例子,它们非常简化,这种简化形式没有实际意义,但它会帮助我理解使用这两个例子是如何工作的:
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);;
第一个例子不起作用,而第二个例子起作用。第一个争论类型 ofx
和test
不兼容,但我不明白它是如何得出 type of 的结论x
的< testme : bool > -> < testme : bool >
。为什么不只是< testme : bool >
?