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"
| _ -> ()