【问题标题】:Is there a total alternative to the `read` function?`read` 函数是否有完全的替代方案?
【发布时间】:2017-03-29 17:36:55
【问题描述】:

为什么函数read 无法解析其参数时会终止可执行文件?

在我看来,拥有String -> Maybe a 类型的函数会更方便,如果无法将字符串解析为a 类型,则返回Nothing,但我找不到任何东西喜欢它。我错过了什么?

【问题讨论】:

  • 我对 Haskell 了解不多,但我无法理解 read 函数如何是纯粹的:根据定义,它具有显着的副作用。
  • @BasileStarynkevitch read 不从输入中读取;它只是将其参数转换为 String(如 Python 的 __str__ 方法)。
  • 它是 Prelude 中的几个函数之一(包括 head 和 tail),这些函数本来可以是全部的,但为了简单起见被定义为部分函数。
  • @BasileStarynkevitch 为什么你认为解析字符串需要显着的副作用?
  • @chepner Nitpick:我认为您描述的是show,而不是read,这是相反的方向。仍然是一般观点:read 从 String 转换为某种类型,但不执行任何输入/输出。

标签: haskell casting functional-programming


【解决方案1】:

您要查找的函数名为readMaybe,并在模块Text.Read 中定义:

https://hackage.haskell.org/package/base-4.9.1.0/docs/Text-Read.html#v:readMaybe

它从 GHC 7.6 开始可用。在此之前,您必须调用 reads,它会返回一个(可能为空的)已解析值列表,并对其进行模式匹配。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
相关资源
最近更新 更多