gpt4 book ai didi

reflection - 有没有办法像 c# 或 java 在 OCaml 中的反射那样获取值的类型?

转载 作者:行者123 更新时间:2023-12-04 12:44:46 25 4
gpt4 key购买 nike

我使用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
. . .

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

关于reflection - 有没有办法像 c# 或 java 在 OCaml 中的反射那样获取值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52923205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com