F#试图创建一个更好的printf

时间:2012-03-22 17:23:28

标签: f# unit-type

我正在尝试创建一个可以打印任何类型的print语句。我想使用类型模式匹配来实现这一点。

这不起作用:

let print x = match x with | :? int -> printf "INT"; | _ -> None;;

我收到消息:

  

让print x =将x与|匹配:? int - > printf“INT”; | _ - >无;;
  ----------------------------- ^^^^^^

     

stdin(47,30):错误FS0008:此运行时强制或类型测试来自   类型       '到       int涉及基于此程序点之前的信息的不确定类型。某些类型不允许运行时类型测试。   需要进一步的类型注释。

那么,我不能在int上进行类型匹配?我不能做什么其他类型的匹配?什么意思需要进一步的类型注释?

1 个答案:

答案 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不同,因此您的函数未进行类型检查。