如何将多态值转换为字符串?

J.B*_*.B. 1 ocaml static-typing pattern-matching parametric-polymorphism

我实际上正在寻找一个带有签名的函数,'a -> string它将给定的多态类型转换为字符串.我已经想过类似的东西

let func elem = match elem with
| int -> string_of_int elem ...
Run Code Online (Sandbox Code Playgroud)

希望有人可以帮助我,谢谢!

oct*_*ron 5

OCaml中的类型不匹配,这是一个功能!这种限制导致参数化.

简单来说,如果一个函数,f对于类型'a -> string,它的类型承诺可以处理任何可能的类型,过去和未来.换句话说,该函数f不能对其参数的内容做出任何假设.

因此,唯一诚实的可能性是不要尝试从参数中读取任何内容,而只是返回一个字符串

 let f _x = "x?"
Run Code Online (Sandbox Code Playgroud)

可能,我们可以阅读一些具有功能的全球状态 g

let f _x = g ()
Run Code Online (Sandbox Code Playgroud)

例如

let counter = ref 0
let f _x = incr counter; string_of_int !counter
Run Code Online (Sandbox Code Playgroud)

  • 此外,无论如何,类型在运行时都不存在.但是可以使用变量使用类型信息显式标记值,例如`type t = Int of int | 字符串`,当然可以匹配. (2认同)