对于打印可选值有什么约定吗?

Are there any conventions for printing optional values?

本文关键字:什么 约定 于打印 打印      更新时间:2023-10-16

假设我想为optional<T>类模板重载operator<<。如何打印"缺席值",以及如何打印"实值"x?

none
some x

[]
[x]

或者我应该在第一种情况下不打印任何内容,而在第二种情况下打印x ?这通常是怎么处理的?

我喜欢打印NoneSome x的选项。我认为这立即描述了正在发生的事情(特别是对于熟悉Haskell的人)。

就我个人而言,我不会使用[][x]替代,因为许多语言使用方括号来表示某种列表。如果我看到这个输出,我会立即认为打印了一个列表,而不是一个可选的类型。

在没有任何上下文的情况下,我认为可选对象是集合的一种特殊情况,它要么为空,要么只有一个成员。

你可能已经有了一个如何打印集合或复合对象的约定,但是像{}(如果它是空的)或{x}(如果它的值是x)这样的东西似乎是合理的。如果输出一个空向量作为none,输出一个包含三个元素的向量作为some x y z,那么对可选类型应用相同的约定:-)

我不知道有什么具体的约定。就我个人而言,我会在值缺失时打印(null),否则打印实际值。

这取决于类型。如果你想打印一个字符串,它可以是"或"Fred"。如果是数组,则可以是{}或{1,2,3}。

跟随这个视频或附在网页中的代码可以帮助你。漂亮的打印机

行为的选择可能应该基于为什么要实现输出操作符。如果主要是为了调试目的,那么提供一个丢失值的视觉线索是很重要的。考虑到方括号经常用于表示可选性,例如在命令帮助消息中,

另一方面,如果这是一个通用的输出操作符,最好的方法可能是打印现有的值,就像您对非可选的底层类型所做的那样,并为缺失的值打印空字符串。

The UNIX and the Echo.
在新泽西的土地上住着一位美丽的少女UNIX,学者们不远万里来膜拜她。所有的人都被她的纯洁迷住了,都想把她暴露出来,有人欣赏她纯洁的优雅,有人欣赏她优雅的礼仪,还有人欣赏她在完成严格任务时的敏捷,即使在更富裕的国家也很少有人能完成。她的心胸是如此宽广,天性是如此通情达理,以至于UNIX只收养了她的追求者中那些富得让人受不了的人。不久,许多后代长大了,兴旺发达,并蔓延到世界的尽头。

大自然自己微笑着,对UNIX的回应比对其他人类的回应更热切。那些对宫廷礼仪知之甚少的下等人,对她的回声感到高兴,因为她的回声是如此精确和清晰,他们几乎不相信她会得到同样的岩石和树林的回应,而这些岩石和树林却把他们自己的叫声混淆到荒野中。顺从的UNiX答应了她的要求,完美地回应了她的要求。当一个不耐烦的仆人问UNIX:"什么也不回应"时,UNIX顺从地张开嘴,什么也不回应,然后又闭上了嘴。

"你这是什么意思,"年轻人质问道,"你这样张嘴?"从今以后,当你不应该回应的时候,永远不要开口!"

一个敏感的年轻人恳求道:"但我想要完美的表演,即使你没有回音,闭着的嘴也不会有回音。"为了不冒犯任何一方,UNIX同意对急躁的年轻人和敏感的年轻人说不同的"没什么"。她把这个敏感的东西叫做"n"。

可是现在,当她说"n"的时候,她并不是真的什么也没说,所以她不得不张两次嘴,一次说"n",一次什么也没说,所以她不喜欢这个敏感的年轻人,他立即说:"n在我听起来就像一个完美的‘没有’,但是第二次就毁了它。"我想让你收回其中一个。"因此,不能容忍冒犯的UNiX同意取消一些回声,并将其命名为"c"。现在,这个敏感的年轻人可以通过同时要求'n'和'c'来听到一个完美的无回音。

但是他们说他在听到一个音符之前就死于过多的音符。

—Doug McIlroy