给定以下类型定义:
type 'a range = Full | Range of ('a * 'a);;
如何将此类型的值转换为字符串?
我目前有:
let string_of_range r = match r with
| Full -> "Full"
| Range(a,b) -> "Range("^(string_of_int a)^","^(string_of_int b)^")";;
但是,当然,这表示a和b的类型为int . 它们也可以是浮点数或字符(请参阅我之前关于约束类型的问题)
3 回答
如果你使用sexplib,你可以免费获得这种转换器 . 一旦打开语法扩展,然后写这个:
将使用此签名自动生成函数
如果你宣布:
你会得到
您甚至可以在线创建适当的转换器:
如何将您的数据类型设置为:
更改函数以接受字符串转换器并在实现中使用它 . 然后当你调用它时,传入适当的转换器和范围 . 就像是:
它将具有以下类型:
string_of_range : ('a -> string) -> 'a range -> string
示例电话:
通过这种方式订购,您可以轻松制作更专业的转换器 .
它将具有以下类型:
string_of_int_range : int range -> string