首页 > 解决方案 > 如何使用 bs-deriving 覆盖/提供自定义实例

问题描述

使用 bs-deriving,我可以show使用[@deriving show]. 但是,尚不清楚我将如何使用相同的派生但为特定数据类型提供自定义显示实例。

例子:

[@deriving show]
type bar = |Bar(int);

[@deriving show]
type foo = |Foo(int, bar);

使用上面的示例,我将如何更改 Bar 以例如十六进制打印其整数?

标签: reasonbucklescriptderiving

解决方案


您应该能够@printer像这样定义自己的打印机功能:

[@deriving show]
type bar = Bar([@printer fmt => fprintf(fmt, "0x%x")] int);

fprintf是一个本地定义的函数,它接受一个格式化程序、一个格式字符串和一些由格式字符串指定的值。在这种情况下为简洁起见,我们部分应用它以避免必须显式传递int值。它相当于(fmt, n) => fprintf(fmt, "0x%x", n).

格式字符串指定数字应格式化为十六进制,小写字母(%x部分)并以 . 为前缀0x。所以31会输出0x1f


推荐阅读