假设我想operator<<
为optional<T>
类模板重载。我将如何打印“缺失值”,以及如何打印“真实值”x?
none
some x
或者
[]
[x]
或者我应该为第一种情况和x
第二种情况不打印任何内容?这通常是如何处理的?
假设我想operator<<
为optional<T>
类模板重载。我将如何打印“缺失值”,以及如何打印“真实值”x?
none
some x
或者
[]
[x]
或者我应该为第一种情况和x
第二种情况不打印任何内容?这通常是如何处理的?
我喜欢 printNone
和Some x
. 我认为这立即描述了正在发生的事情(尤其是对于熟悉 Haskell 的人)。
就个人而言,我不会使用[]
and[x]
替代方案,因为许多语言使用方括号来表示某种列表。如果我看到该输出,我会立即认为已经打印了一个列表,而不是可选类型。
在没有任何上下文的情况下,我会将可选项视为集合的特例,它要么是空的,要么只有一个成员。
您可能已经有一个关于如何打印集合或复合对象的约定,但是{}
如果它是空的或者{x}
它是否具有值x
似乎是合理的。如果您打印出一个空向量 asnone
和一个具有三个元素的向量 as some x y z
,那么无论如何都将相同的约定应用于可选类型:-)
我不知道任何具体的约定。就个人而言,我会(null)
在缺少值时打印,否则会打印实际值。
这取决于类型。如果要打印字符串,可以是“”或“Fred”。如果它是一个数组,它可以是 {} 或 { 1, 2, 3 }。
关注此视频或网页中附加的代码可以为您提供帮助。 漂亮的打印机
行为的选择可能应该基于您实现输出运算符的原因。如果它主要用于调试目的,则提供缺少值的视觉线索很重要。在方括号之间打印现有值,或者在缺少值时仅打印左方括号和右方括号是一种有效的方法,因为方括号通常用于指示可选性,例如在命令帮助消息中。
另一方面,如果这是一个通用的输出运算符,最好的方法可能是打印现有值,就像打印非可选基础类型和缺失值的空字符串一样。
The UNIX and the Echo.
UNIX 居住在新泽西州的土地上,是一位美丽的女仆,学者们不远万里慕名而来。所有人都为她的纯洁而眼花缭乱,所有人都试图揭露她,一个是因为她的处女风度,另一个是优雅的礼貌,另一个是因为她能够灵活地执行即使在更富裕的土地上也很少完成的艰巨任务。她心胸宽广,天性随和,以至于 UNIX 采用了所有的追求者,除了那些难以忍受的富有的追求者。不久,许多子孙繁衍繁盛,传到地极。
与其他凡人相比,大自然本身对 UNIX 微笑和回答更热切。谦逊的人,对更礼貌的举止知之甚少,很喜欢她的回声,如此精确和水晶般清晰,他们几乎不相信同样的岩石和树林能回答她,这些岩石和树林在旷野中如此混乱地喊叫。顺从的 UNIX 对她被问到的问题做出了完美的回应。当一位不耐烦的小伙子问 UNIX,“无回声”时,UNIX 顺从地张开嘴,没有回声,然后又闭上了。
“不管你是什么意思,”年轻人问道,“就这样张开嘴?从此以后,当你应该什么都不回应的时候,永远不要开口!UNIX 有义务。
“但我想要一场完美的表演,即使你什么都没有回应,”一个敏感的年轻人恳求道,“闭上的嘴巴也不会发出任何回应。” UNIX 不想冒犯任何一方,同意对不耐烦的年轻人和敏感的年轻人说不同的话。她把敏感的无所谓'\n'。
可现在说‘\n’的时候,她真的不是什么都没说,只好张嘴两次,一次是说‘\n’,一次是什么都不说,所以她没有取悦敏感的年轻人,立即说道,'\n 对我来说听起来像是一个完美的虚无,但第二个毁了它。我要你收回其中一个。因此,无法忍受冒犯的 UNIX 同意撤消一些回声,并将其命名为“\c”。现在敏感的年轻人可以通过同时要求'\n'和'\c'来听到完美的回声。
但是他们说他在听过一个音符之前就死于符号过多。
——道格麦克罗伊