elm n00b。我讀過榆樹要求Maybe
明確處理。這就是說,當處理嵌套Maybe
s時,有沒有一種表達方式/模式來表示「如果所有的Maybe
都包含值然後做某事,否則給我這個默認值」?更新嵌套的Maybe
我想Maybe.andThen
除了我不明白它會適合在這裏。
我來到一個類似的問題,最近的是在Haskell:可以在試穿榆樹運行Simplifying nested Maybe pattern matching
示例代碼如下。我們模擬一個「盒子」,它可能包含一個彈奏的「大理石」,它的中心可能有許多「葉片」(或長笛)。 updateBox
增加葉片的數量(假設它更新了其他值,因此沒有在這裏顯示,因此得名)
我在找的是一個簡潔的方式來說:「如果大理石存在,並且它有葉片,給我一個新的大理石w /增加葉片;否則讓我回大理石「。
(請注意,這可能會進行重組,以避免嵌套也許遍歷,但是這不是問題。)
旁白:IMO感覺奇怪,需要下面說Nothing -> Just marble
在-- why do we need Just?
評論。該代碼已經沿着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}
據透露你不需要通過參數傳遞給在let塊的功能,你可以直接訪問,如果他們你要。 'updateBox b = let updateMarble = case b.marble of' – farmio