榆树n00b.我已经读到Elm需要显式地处理Maybe。也就是说,在处理嵌套的Maybe时,是否有一种表达事物的方式/模式:“如果所有的Maybe都包含值,那么就做一些事情,否则就给我这个缺省值”?
我想Maybe.andThen,除了我看不出它怎么适合这里。
我遇到的最接近类似的问题是Haskell:Simplifying nested Maybe pattern matching
下面的样例代码可以在try-elm上运行。我们模拟一个“盒子”,其中可能包含一个弹奏的“大理石”,它的中心可能有许多“叶片”(或长笛)。如果有的话,updateBox会增加叶片的数量(假设它更新了这里没有显示的其他值,因此它的名称)
我要找的是一种简洁的说法:“如果大理石存在,如果它有叶片,给我一个新的大理石w/增量叶片;否则就把大理石还给我。”
(请注意,可以对其进行重组,以避免嵌套的可能遍历,但这不是问题。)
旁白:在下面的Nothing -> Just marble评论中,我觉得很奇怪。代码已经遵循了Just marble路径,所以它不应该遵循这样的说法,那一点上的大理石已经是一个Just marble
import Html exposing (text)
main =
text (toString (updateBox mybox))
type alias Box =
{marble: Maybe Marble}
type alias Marble =
{vanes: Maybe Int}
mybox = Box <| Just <| Marble <| Just 1
updateBox: Box -> Box
updateBox b =
let
updateMarble marble =
case marble of
Just marble ->
case marble.vanes of
Just vanes -> Just {marble | vanes = Just(vanes + 1)}
Nothing -> Just marble -- why do we need Just?
Nothing -> marble
in
{b | marble = updateMarble b.marble}发布于 2017-04-13 16:13:00
您可以使用Maybe.map消除显式Nothing检查的需要:
updateBox: Box -> Box
updateBox b =
{b | marble = Maybe.map (\m -> { m | vanes = Maybe.map ((+) 1) m.vanes }) b.marble}https://stackoverflow.com/questions/43396929
复制相似问题