Recursion 递归对象:以一种方式工作,但不能以另一种方式工作

Recursion 递归对象:以一种方式工作,但不能以另一种方式工作,recursion,ocaml,Recursion,Ocaml,下面是两个示例,它们非常简化,这种简化形式没有实际意义,但它将帮助我理解如何使用这两个: 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\

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

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);;
第一个示例不起作用,而第二个示例起作用。第一种观点认为
x
test
的类型不兼容,但我不明白
x
的类型是
->
的结论是什么。为什么不干脆

以下是我看到的:

# let test x = object (self) method testme = x == self end;;
val test : < testme : bool > -> < testme : bool > = <fun>
#让测试x=object(self)方法testme=x==self-end;;
val测试:->=
实际上,
test
是一个函数,而不是一个对象。它具有基本OCaml函数定义的形式。您说
x
是一个函数,但是
x
test
的函数参数。因此
x
的类型是