Types 检查类型OCaml

Types 检查类型OCaml,types,ocaml,Types,Ocaml,我想写一个函数,根据输入的类型做不同的事情。或者换句话说:如何编写与此python代码等效的代码: def stringOrInt(a): if type(a) is str: return "it's a string" elif type(a) is int: return "it's a int" else return "it's neither" Ocaml不支持这种类型检查。根据您想要做什么,可能的

我想写一个函数,根据输入的类型做不同的事情。或者换句话说:如何编写与此python代码等效的代码:

def stringOrInt(a):
     if type(a) is str:
         return "it's a string"
     elif type(a) is int:
         return "it's a int"
     else
         return "it's neither"

Ocaml不支持这种类型检查。根据您想要做什么,可能的解决方法是使用变体
type StrOrInt=String of String | Int of Int |两者都不

然后,您的函数将对变量进行模式匹配

let str_or_int a = match a with 
| String s -> print_string "this is a string"
| Int i -> print_string "this is an int"
| Neither -> print_string "neither"

答案是你没有。OCaml类型在运行时不可用。您是否考虑了具体的用例?您不能检查类型,如果需要,请使用变体类型
type stringOrInt=String of String | Int of Int
。或GADT类型,用于输入和输出类型需要匹配的更复杂的用例,例如unpack\u stringOrInt应该为
string“str”
返回string,为
int 42
返回int。您到底想做什么?为什么会有一个静态未知类型?