Oop OCaml对象中的递归函数

Oop OCaml对象中的递归函数,oop,recursion,methods,ocaml,Oop,Recursion,Methods,Ocaml,我试图在对象方法的上下文中找出OCaml的递归。我尝试了以下代码,但似乎无法编译 class foo = object (self) method loopTest = let rec doIt x = Printf.printf "%d\n" x; if x>1 then doIt (x+1) end;; 如何在方法中创建这种递归函数 修订守则: class foo = object (self) method loopTest = let rec doIt x

我试图在对象方法的上下文中找出OCaml的递归。我尝试了以下代码,但似乎无法编译

class foo =
object (self)
 method loopTest =
  let rec doIt x =
   Printf.printf "%d\n" x;
   if x>1 then doIt (x+1)
end;;
如何在方法中创建这种递归函数

修订守则:

class foo =
object (self)
 method loopTest =
  let rec doIt x =
   Printf.printf "%d\n" x;
   if x<10 then doIt (x+1) in doIt 0
end;;
class-foo=
对象(自身)
方法循环试验=
让rec doIt x=
Printf.Printf“%d\n”x;

如果x我的OCaml生锈了,但我不认为让我们计算出它的界限。如果您想让testLoop调用doIt,可以在doIt中添加一个类似的函数。

您仍然需要在loopTest方法中调用doIt
let
只定义doIt,就像
method
只定义一个方法,不调用它一样。编译器检测到这一点是因为它不知道从loopTest返回什么(比如一个没有返回类型void的方法,但在C#或Java中没有实现)


此外,使用此代码进行无限循环,可能
如果x>1,则doIt(x-1)
后跟
doIt 100
是一个更好的主意。

在同一代码中有两个无限循环;),我想你应该学习迭代器;)