有人可以向我解释为什么 string 上的show函数不是id函数吗?例如
show (show 42)
将返回"\"42\""
奇怪的东西,对我来说不是直觉的。
show
toString
如果它只是将某些内容转换为任意字符串(如在 Java 中),它就不是很有用。如果结果既易于阅读又易于机器阅读,它会更有用,因此常见的用途show
是生成您正在输入的值的序列化表示show
,以便您可以再次使用read
, 以及,对于 , 的大多数实现show
,这样您就可以show
在 Haskell REPL 中键入 n的字符串,ghci
然后取回反序列化的值。
所以,如果你有一个像"42"
,show
这样的字符串,你想得到字符串"\"42\""
,因为当你输入42
(ghci
并且等效地使用read
函数)时,你会得到一个数字,而当你输入"42"
时ghci
,你会得到你想要的字符串.
因为read
是 的倒数show
。所以我应该总是能够read
得到结果show
,并取回一个字符串。
> (read "42")::String
"*** Exception: Prelude.read: no parse
> (read "\"42\"")::String
"42"