有没有办法检查/测试变量的类型?
我想像这样使用它:
if x = int then foo
else if x = real then bar
else if x = string then ...
else .....
有没有办法检查/测试变量的类型?
我想像这样使用它:
if x = int then foo
else if x = real then bar
else if x = string then ...
else .....
ML 语言是静态类型的,所以不可能在不同的时间有不同的类型。x
有时不能有 type int
,有时有 type string
。如果您需要这样的行为,通常的方法是将值包装在一个对类型信息进行编码的容器中,例如:
datatype wrapper = Int of int | Real of real | String of string
然后你可以在构造函数上进行模式匹配:
case x of Int x -> foo
| Real x -> bar
| String x -> ...
在这种情况下,x
明确输入为 a wrapper
,这样就可以了。
一般来说,即使x
是多态类型,也不可能做你想做的事情(不按照 Chuck 的建议进行包装)。
这是一个深思熟虑的设计决定;它可以根据函数的类型对函数做出非常有力的结论,否则您无法得出这些结论。例如,它允许您说具有类型的函数'a -> 'a
必须是标识函数(或者总是抛出异常的函数,或者从不返回的函数)。如果您可以检查'a
运行时的内容,则可以编写一个鬼鬼祟祟的程序,例如
fun sneaky (x : 'a) : 'a = if x = int then infinite_loop() else x
那将违反规则。(这是一个非常简单的示例,但是通过知道您的类型系统具有此属性,您可以做很多不那么简单的事情。)