我了解到可以创建接受任意类型的函数,如下所示:
let f x = x;;
let f x = ();;
let f (x : 'a) = ();;
但我找不到在函数内部使用类型信息的方法,如下所示:
let print_is = function
| (x : int) -> print_int x
| (s : string) -> print_string s
| _ -> print_string "***";;
这根本不可能,如果是这样的话 - 这种限制的根本想法是什么?或者我只是没有正确地进行谷歌?
答案 0 :(得分:2)
OCaml在运行时不保留类型信息:为了编写您建议的程序,需要匹配x
的类型,因此需要一个表示x
类型的值,以便对其进行模式匹配。
我认为有两种方法可以进一步回复您的问题: