Reflection 是否有某种方法可以获得值的类型,比如OCaml中的c或java反射?

Reflection 是否有某种方法可以获得值的类型,比如OCaml中的c或java反射?,reflection,ocaml,Reflection,Ocaml,我使用vscode+merlin来读取OCaml代码。有时它可以给我一个类型,但有时它只告诉我a型,这就等于什么都不告诉我。我必须通过阅读代码来猜测值的类型。阅读代码以得出值的类型很重要,但有时我会怀疑我的猜测是否正确 所以我想要一个方法,可以在运行时获取值的类型,比如Java或C中的反射 var a = 1; Console.WriteLine(a.GetType()); 在OCaml中有什么方法可以做同样的事情吗?OCaml是静态类型的。也就是说,它的类型只在编译时存在。在运行时,只有值。

我使用vscode+merlin来读取OCaml代码。有时它可以给我一个类型,但有时它只告诉我a型,这就等于什么都不告诉我。我必须通过阅读代码来猜测值的类型。阅读代码以得出值的类型很重要,但有时我会怀疑我的猜测是否正确

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

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

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

OCaml是静态类型的。也就是说,它的类型只在编译时存在。在运行时,只有值。所以实际上,你不可能有一个函数来决定一个值的类型

在编译时确定类型,并且不允许程序的行为依赖于运行时的测试类型,这确实有好处。一般来说,它使程序更清晰,更容易推理

如果您想验证您对类型的猜测,可以在编译时将类型归属于变量或任何表达式

例如,你可以说:

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

如果函数\u to \u调用返回的不是整数列表,编译器将在此时发出错误。

如果您能更明确地描述用例,这将有所帮助。如果类型是“a”,可能是因为它是在具体类型无关紧要的上下文中使用的,或者只是与另一个类型相关?