gpt4 book ai didi

f# - 为什么 F#'s printf non-existent in OCaml' s printf 中的 %A 说明符是?

转载 作者:行者123 更新时间:2023-12-02 02:00:49 24 4
gpt4 key购买 nike

在 F# 的 printf 中有格式说明符 %A它允许传入任何 F# 类型,并且将对其进行求值和打印。

举个例子:

type Result<'a> =
| Failure
| Success of 'a

printf "%A" (Success "hello") // prints out 'Success "hello"'

显然,Result<'a>不是内置类型。

我可以在 OCaml 中声明类似的类型,但 Printf.printf 没有等效的说明符-相反,我必须实现我自己的 string_of_result函数,并使用%s格式字符串中的说明符。此外,由于这是一个多态类型,我必须创建一个不直接的函数来处理 'a 的任何类型实例。 .

我的问题是 - 为什么 OCaml 缺少这个方便的说明符?是因为没有动力去执行吗?是因为 F# 中缺少一些底层的魔力吗?

最佳答案

我想说“缺乏幕后魔力”可能就是原因。

在 F# 中,%A 说明符推迟打印到基于反射的打印机 - 它使用运行时类型信息来遍历和打印值。该过程中使用的反射 API 很大程度上是 .NET 特定的东西。虽然很方便,但它也是一种相对昂贵的机制 - 如果您可以使用更具体的机制,则不应将其用作一揽子说明符。

据我所知,OCaml 没有相应的反射功能可以在这里使用。也许还有另一种机制可以让您实现通用打印 - 但我对 OCaml 内部结构还不够熟悉。

关于f# - 为什么 F#'s printf non-existent in OCaml' s printf 中的 %A 说明符是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43397246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com