【问题标题】:How to convert a polymorphic value to a string?如何将多态值转换为字符串?
【发布时间】:2018-12-12 16:40:04
【问题描述】:

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

let func elem = match elem with
| int -> string_of_int elem ...

希望有人能帮助我,谢谢!

【问题讨论】:

标签: pattern-matching ocaml static-typing parametric-polymorphism


【解决方案1】:

在 OCaml 中无法匹配类型,这是一项功能!这种限制导致parametricity

简单来说,如果函数f 具有'a -> string 类型,则它的类型承诺适用于任何可能的类型,过去和未来。换句话说,函数f 不能对其参数的内容做出任何假设。

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

 let f _x = "x?"

可能,我们可以通过g函数读取一些全局状态

let f _x = g ()

例如

let counter = ref 0
let f _x = incr counter; string_of_int !counter

【讨论】:

  • 此外,无论如何,类型在运行时都不存在。但是可以使用变体使用类型信息显式标记值,例如type t = Int of int | String of string,当然可以匹配上。
猜你喜欢
  • 2020-11-05
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多