4

有人可以向我解释为什么 string 上的show函数不是id函数吗?例如

show (show 42)将返回"\"42\""奇怪的东西,对我来说不是直觉的。

4

2 回答 2

8

showtoString如果它只是将某些内容转换为任意字符串(如在 Java 中),它就不是很有用。如果结果既易于阅读又易于机器阅读,它会更有用,因此常见的用途show是生成您正在输入的值的序列化表示show,以便您可以再次使用read, 以及,对于 , 的大多数实现show,这样您就可以show在 Haskell REPL 中键入 n的字符串,ghci然后取回反序列化的值。

所以,如果你有一个像"42",show这样的字符串,你想得到字符串"\"42\"",因为当你输入42ghci并且等效地使用read函数)时,你会得到一个数字,而当你输入"42"ghci,你会得到你想要的字符串.

于 2012-05-28T16:59:40.567 回答
6

因为read是 的倒数show。所以我应该总是能够read得到结果show,并取回一个字符串。

> (read "42")::String
"*** Exception: Prelude.read: no parse
> (read "\"42\"")::String
"42"
于 2012-05-28T16:55:03.760 回答