Nic*_*ner 7 ocaml object instanceof typechecking
如果我有一个对象,我该如何确定它的类型?(是否存在与Java instanceof
运算符等效的OCaml ?)
OCaml具有对象的结构类型,而不是Java中的主格类型.因此,对象的类型基本上由其方法确定(并且仅确定).OCaml中的对象可以直接创建,而无需像类一样进行.
您可以编写要求其参数对象具有某些方法的函数(并且这些方法具有某些类型); 例如,以下方法接受一个参数,该参数是具有方法"bar"的任何对象:
let foo x = x#bar
Run Code Online (Sandbox Code Playgroud)
在Lambda the Ultimate上讨论"匹配带有模式的对象"(该论文使用Scala作为语言,所以不会回答你的问题).更相关的Ocaml邮件列表线程表明没有对象的RTTI /安全向下转发.
对于代数(非对象)类型,您显然有:
match expr with
Type1 x -> x
Type2 (x,y) -> y
Run Code Online (Sandbox Code Playgroud)
有人写了一个扩展,允许向下/向上转换Ocaml对象.