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
的类型是