2015-10-24 51 views
0

我想定义一个类foo和一个异常X,其构造函数以一对foo作为参数。类foo的方法应该能够引发异常X ......我无法设法使这些语法正确。任何人都可以请建议如何做到这一点?如何在ocaml中定义相互递归类和异常

+0

对于函数本地的异常可以吗?如果是这样,那么[最近的问题](http://stackoverflow.com/questions/33312718/is-it-possible-to-define-an-exception-inside-a-function)。否则,你有没有试过看[递归模块](http://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec220)? – antron

+0

如果您的类类型相当干净且稳定,则可以在定义异常之前将其声明为类型。 OCaml类的类型是结构化的,所以你不需要在异常之前定义实际的类,只是它的类型。 –

回答

1

这是一个集思广益的建议。由于OCaml对类使用结构化类型,因此可以在定义异常之前将类声明为类型。这里有一个适用于我的草图:

class type c = object method m : unit end 

exception E of c * c 

class myclass = 
    object (self) 
    method m : unit = raise (E ((self :> c), (self :> c))) 
    end 

这当然有点麻烦。