是否有某种方法可以获取OCaml中的c#或Java反射之类的值类型?

时间:2018-10-22 06:04:35

标签: reflection ocaml

我使用vscode + merlin读取OCaml代码。有时它可以给我一个类型,但有时它只告诉我一个类型'a,与什么都没告诉我一样。我必须通过阅读代码来猜测值的类型。读取代码以得出一个值的类型很重要,但是有时候,如果我的猜测正确,那我肯定会失败。

所以我想要一个可以在运行时获取值类型的方法,例如Java或C#中的反射。

var a = 1;
Console.WriteLine(a.GetType());

在OCaml中有什么方法可以做同样的事情?

1 个答案:

答案 0 :(得分:3)

OCaml是静态类型的。也就是说,其类型仅在编译时存在。在运行时,只有值。因此,您实际上无法拥有确定值类型的函数。

(恕我直言,在编译时确定类型具有真正的优势,并且不允许程序的行为在运行时依赖测试类型。通常,它使程序更清晰,更容易推理。)

如果要验证对类型的猜测,可以在编译时通过将类型赋予变量(或实际上是任何表达式)来实现。

例如,您可以说:

let (x : int list) = funtion_to_call arg1 arg2 in
. . .

如果function_to_call返回的不是整数列表,则编译器将在此时发出错误。