我试图在对象的方法的上下文中找出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;;
答案 0 :(得分:4)
您仍需要在loopTest方法中调用doIt。 let
只是定义了doIt,就像method
只定义一个方法一样,并没有调用它。编译器检测到这一点,因为它不知道从loopTest返回什么(比如没有返回类型为void的方法,但在C#或Java中没有实现)。
此外,您正在使用此代码进行无限循环,可能if x>1 then doIt (x-1)
后跟doIt 100
是更好的主意。
答案 1 :(得分:2)
我的OCaml很生疏,但我不认为让它评估它的约束力。如果你想让testLoop调用doIt,请使用doIt或类似函数。
答案 2 :(得分:0)
同一代码中的两个无限循环;),你应该了解迭代器我猜;)