Haskell新手在这里。我试图从 Haskell 的库中理解这个例子。diagrams
具体来说,有这样一行:
Just t = <thing>
<thing>
类型在哪里Maybe (Tree a)
我不明白这是在做什么。我知道我们需要从Maybe
. 我用那行代码替换了
t = fromJust <thing>
它的工作原理相同。这两行之间有什么区别,谁能解释第一行在做什么?
fromJust
几乎等同于:
fromJust :: Maybe a -> a
fromJust (Just t) = t
请注意,它是相同的模式匹配!如果您确定您Maybe
将成为 aJust
而不是 a Nothing
,则可以使用fromJust
它来获取其值而无需模式匹配,但在大多数情况下匹配更清晰,因此您在这里不需要它。
虽然这两种形式的目的相同,
如果出现意外错误,模式匹配表将为您提供更好的错误位置线索。(fromJust内部会抛出fromJust错误异常,而失败的模式匹配将为您提供不完整代码的文件、行和列)
$ ghci
Prelude> :m +Data.Maybe
Prelude Data.Maybe> let t = fromJust Nothing
Prelude Data.Maybe> t
*** Exception: Maybe.fromJust: Nothing
Prelude Data.Maybe> let Just t = Nothing
Prelude Data.Maybe> t
*** Exception: <interactive>:7:5-20: Irrefutable pattern failed for pattern Data.Maybe.Just t
当您非常确定该Maybe
类型将返回一个Just
值时,您可以只进行模式匹配并提取该值。
例子:
Just t = Just 3
将赋值 3 到t
. 您可以将其加载ghci
并自己验证。fromJust
是一样的,但更多的是功能应用。