对于打印可选值有什么约定吗?
Are there any conventions for printing optional values?
假设我想为optional<T>
类模板重载operator<<
。如何打印"缺席值",以及如何打印"实值"x?
none
some x
或
[]
[x]
或者我应该在第一种情况下不打印任何内容,而在第二种情况下打印x
?这通常是怎么处理的?
我喜欢打印None
和Some 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
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- "std::unique_XXX"命名约定背后的基本原理是什么?
- DLL 的"good"调用约定是什么?
- 合并函数参数的适当命名约定是什么?
- 返回布尔值的函数的命名约定是什么
- 当我需要添加一个无用的返回语句时,C++约定是什么
- c++setter编码约定.输入变量名称应该是什么
- 什么是 RAII 类的常见命名约定
- C 和 C++ 调用约定有什么区别
- 最好声明什么来调用Windows程序的约定
- C++文件的大小写有什么约定吗
- 这个标题的命名约定指的是什么
- 定义呼叫约定有什么意义
- WinRT中字段的正确命名约定是什么
- 导出函数的默认调用约定是什么(VS2008)
- Windows RT在ARM上的本机代码调用约定是什么?
- visual studio中静态成员函数的默认调用约定是什么?
- 对于打印可选值有什么约定吗?
- C++ lambda 函数的默认调用约定是什么?
- 命名约定-在C++标识符中使用下划线的规则是什么