我已经阅读了《Expert F#》的大部分内容,并正在构建一个实际的应用程序。在调试过程中,我习惯于传递fsi命令,以便在repl窗口中使事情更加可读:
fsi.AddPrinter(fun (x : myType) -> myType.ToString())
我希望能够扩展此功能以适用于printf格式化程序,这样我就可以输入例如:
printf "%A" instanceOfMyType
并控制自定义类型的输出。这本书暗示说可以做到这一点(第93页,“通用结构格式化可以扩展到任何用户定义的数据类型,这是F#网站上涉及的主题”),但我没有找到任何关于如何实际完成这一点的参考资料。有人知道吗?这是否可能?
编辑:
我应该包括一个代码示例,我正在处理一个记录类型,例如
type myType =
{a: int}
override m.ToString() = "hello"
let t = {a=5}
printfn "%A" t
printfn "%A" (box t)
两个print语句都输出:
{a = 5;}
private
,以避免暴露可能会分配对象属性的对象(而不是作为方法调用)。另外,我无法使用对象方法(“未找到”)。 - Henrik