我正在尝试创建一个可以打印任何类型的print语句。我想使用类型模式匹配来实现这一点。
这不起作用:
let print x = match x with | :? int -> printf "INT"; | _ -> None;;
我收到消息:
让print x =将x与|匹配:? int - > printf“INT”; | _ - >无;;
----------------------------- ^^^^^^stdin(47,30):错误FS0008:此运行时强制或类型测试来自 类型 '到 int涉及基于此程序点之前的信息的不确定类型。某些类型不允许运行时类型测试。 需要进一步的类型注释。
那么,我不能在int上进行类型匹配?我不能做什么其他类型的匹配?什么意思需要进一步的类型注释?
答案 0 :(得分:7)
仅对引用类型执行类型测试。因此:
let print x =
match box x with
| :? int -> printf "INT"
| _ -> ()
或
let print (x: obj) =
match x with
| :? int -> printf "INT"
| _ -> ()
会起作用。
请注意,由于None
的{{1}}类型与option
类型的unit
不同,因此您的函数未进行类型检查。