F#尝试创建更好的打印F

F#尝试创建更好的打印F,f#,unit-type,F#,Unit Type,我正在尝试创建一个可以打印任何类型的打印语句。我想使用类型模式匹配来实现这一点 这不起作用: let print x = match x with | :? int -> printf "INT"; | _ -> None;; 我得到的信息是: 让print x=将x与|::匹配?int->printf“int”;| 124;->没有 -----------------------------^^^^^^ stdin(47,30):错误FS0008:此运行时强制或类型测试来自 类型

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

这不起作用:

let print x = match x with | :? int -> printf "INT"; | _ -> None;;
我得到的信息是:

让print x=将x与|::匹配?int->printf“int”;| 124;->没有
-----------------------------^^^^^^

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


所以,我不能在int上进行类型匹配?还有哪些类型不能进行类型匹配?需要进一步的类型注释是什么意思?

仅对引用类型执行类型测试。因此:

let print x = 
    match box x with 
    | :? int -> printf "INT"
    | _ -> ()

会有用的


请注意,您的函数不进行类型检查,因为
None
属于
选项
类型,它不同于
unit
类型的
printf“INT”

这意味着它无法从您目前给出的代码中推断出“x”的类型。Pad的答案应该是解决方案。或者您可以将“%a”用作打印的掩码。只是为了使@Onorio的注释更明确:您尝试创建的函数已经存在:
printfn“%a”x
let print (x: obj) = 
    match x with 
    | :? int -> printf "INT"
    | _ -> ()