类型安全的 printf

Posted

技术标签:

【中文标题】类型安全的 printf【英文标题】:Type-safe printf 【发布时间】:2012-12-20 00:51:20 【问题描述】:

标准库提供了一个printf 函数,它设法成为可变参数。然而,它没有做的是编译时检查参数类型是否与格式字符串匹配。这将需要依赖类型,而且听起来也很难实现! (您必须使用类型签名来解析整个格式字符串……哎呀!)

但仔细想想,现在我想知道......我们可以用 Template Haskell 做到这一点吗?事实上,有没有人为此编写了一个库??

(看起来你可以很容易地编写一个准引用器来读取 printf 格式规范并生成必要的 N-arg 函数......)

【问题讨论】:

【参考方案1】:

如果您愿意接受“格式字符串”不是真正的字符串,那么您也可以直接在 Haskell 中实现类似 printf 的函数。

这已经被描述,例如,在 Ralf Hinze 的一篇名为“Formatting: a class act”的论文中。在 Hackage 上,我只能找到实现类似这种方法的 xformat 包。

【讨论】:

【参考方案2】:

除了Printf-THprintf-mauke 似乎也有一些 TH 作为事后的想法......还有其他例子吗?

【讨论】:

【参考方案3】:

是的,这是可能的。是的,已经完成了。你真的应该检查这种问题的hackage:http://hackage.haskell.org/package/Printf-TH

【讨论】:

有趣。我现在正在查看 Hackage,但我没有看到……哦等等,它不在 Text 下,它在 Utils 下。哇,看看它拥有的所有文档...... :-( @MathematicalOrchid 我刚刚检查了源代码,似乎没有使用黑线鳕标记记录该文件。奇怪的是没有人维护那个包......

以上是关于类型安全的 printf的主要内容,如果未能解决你的问题,请参考以下文章

Java中printprintf和println的区别

随堂练习 文本处理三剑客 AWK

类型安全与不安全演示

类型安全与静态类型?

Java并发:五种线程安全类型线程安全的实现枚举类型

什么是类型安全?