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

Pau*_*icz 2 f# unit-type

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

这不起作用:

let print x = match x with | :? int -> printf "INT"; | _ -> None;;
Run Code Online (Sandbox Code Playgroud)

我收到消息:

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

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

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

pad*_*pad 7

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

let print x = 
    match box x with 
    | :? int -> printf "INT"
    | _ -> ()
Run Code Online (Sandbox Code Playgroud)

要么

let print (x: obj) = 
    match x with 
    | :? int -> printf "INT"
    | _ -> ()
Run Code Online (Sandbox Code Playgroud)

会工作.

请注意,您的函数不进行类型检查,因为None它的option类型与unit类型不同printf "INT".