String Elm 0.19可能是默认值

String Elm 0.19可能是默认值,string,int,elm,maybe,String,Int,Elm,Maybe,我已经阅读了文档,但仍然不明白如何在代码中使用Maybe.withDefault。因为从String.toInt我得到的可能是Int,所以我不能使用+符号来添加我试图转换为整数的值。这是榆树0.19。我怎样才能解决这个问题 import Browser import Html exposing (Html, button, div, text) import Html.Events exposing (onClick) main = Browser.sandbox { init = in

我已经阅读了文档,但仍然不明白如何在代码中使用Maybe.withDefault。因为从String.toInt我得到的可能是Int,所以我不能使用+符号来添加我试图转换为整数的值。这是榆树0.19。我怎样才能解决这个问题

import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)


main =
  Browser.sandbox { init = init, update = update, view = view }


-- MODEL

type alias Model = {mainNum : String, curNum : String}

init : Model
init =
  {
      mainNum = ""
      ,curNum = ""
  }

-- UPDATE

type Msg = AddNum String | Add | Clear 

update : Msg -> Model -> Model
update msg model =
  case msg of
    AddNum number ->
        {model | curNum = model.curNum ++ number}

    Add ->
        {model | curNum = String.fromInt ((String.toInt model.curNum) + 
(String.toInt model.mainNum))}

    Clear ->
        init



-- VIEW

view : Model -> Html Msg
view model =
  div []
    [ div [] [ text  model.curNum]
    , button [ onClick (AddNum "1" )] [ text "1" ]
    , button [ onClick (AddNum "2" )] [ text "2" ]
    , button [ onClick (AddNum "3" )] [ text "3" ]
    , div [] []
    , button [ onClick (AddNum "4" )] [ text "4" ]
    , button [ onClick (AddNum "5" )] [ text "5" ]
    , button [ onClick (AddNum "6" )] [ text "6" ]
    , div [] []
    , button [ onClick (AddNum "7" )] [ text "7" ]
    , button [ onClick (AddNum "8" )] [ text "8" ]
    , button [ onClick (AddNum "9" )] [ text "9" ]
    , div [] []
    , button [ onClick (AddNum "0" )] [ text "0" ]
    , button [ onClick Clear] [ text "Clear" ]
    ]

您确实需要一个包含
文本的字符串,但onclick可以处理包含int的消息。i、 e

button [ onClick (AddNum 7)] [ text "7" ]

我建议您也将模型更改为使用整数,这样您就不必从字符串转换为字符串了

您确实需要一个带有
文本的字符串
,但是您的onclick可以处理带有整数的消息。i、 e

button [ onClick (AddNum 7)] [ text "7" ]

我建议您也将模型更改为使用Int,这样您就不必进行任何从/到字符串的转换了

我已通过创建一个函数来修复错误,该函数可以转换Int->Int:

checkInt : Maybe Int -> Int
checkInt x = case x of
    Just y -> y
    Nothing -> 0

我已通过创建一个函数来修复此错误,该函数可能会转换为Int->Int:

checkInt : Maybe Int -> Int
checkInt x = case x of
    Just y -> y
    Nothing -> 0
这是一个收到2个参数的函数(最后一个是返回值)

如果
a
Int
,那么我们有:

withDefault : Int -> Maybe Int -> Int

-- if `a` is a `Float` then we have
withDefault : Float -> Maybe Float -> Float

-- in general, if `a` is an `X` then we have
withDefault : X -> Maybe X -> X
1st参数是当2nd参数
Nothing
时将返回的参数

因此,如果2nd param不是
Nothing
,则函数将返回2nd param中的值

所以最基本的例子是:

-- hard-code 2nd param
withDefault 10 (Just 20) -- this function call results 20
withDefault 10 Nothing -- this function call results 10
高级的:

-- 2nd param is Nothing
withDefault 10 (String.toInt "abc") -- this function call results 10

-- 2nd param is not Nothing
withDefault 10 (String.toInt "123") -- this function call results 123
在您的代码中:

Add ->
    let
        cur : Int
        cur =
            Maybe.withDefault 0 (String.toInt model.curNum)

        main : Int
        main =
            Maybe.withDefault 0 (String.toInt model.mainNum)
     in
     { model | curNum = String.fromInt (cur + main) }
如您所见,
可能。使用默认值
可确保您始终收到
Int
以进行
添加返回的Int
计算

如果没有它,您将始终收到
Maybe Int
,添加
Maybe Int
将始终返回
Maybe Int

注: 我上面的代码只适用于
Maybe.withDefault
用法说明,不适用于生产代码

这是一个收到2个参数的函数(最后一个是返回值)

如果
a
Int
,那么我们有:

withDefault : Int -> Maybe Int -> Int

-- if `a` is a `Float` then we have
withDefault : Float -> Maybe Float -> Float

-- in general, if `a` is an `X` then we have
withDefault : X -> Maybe X -> X
1st参数是当2nd参数
Nothing
时将返回的参数

因此,如果2nd param不是
Nothing
,则函数将返回2nd param中的值

所以最基本的例子是:

-- hard-code 2nd param
withDefault 10 (Just 20) -- this function call results 20
withDefault 10 Nothing -- this function call results 10
高级的:

-- 2nd param is Nothing
withDefault 10 (String.toInt "abc") -- this function call results 10

-- 2nd param is not Nothing
withDefault 10 (String.toInt "123") -- this function call results 123
在您的代码中:

Add ->
    let
        cur : Int
        cur =
            Maybe.withDefault 0 (String.toInt model.curNum)

        main : Int
        main =
            Maybe.withDefault 0 (String.toInt model.mainNum)
     in
     { model | curNum = String.fromInt (cur + main) }
如您所见,
可能。使用默认值
可确保您始终收到
Int
以进行
添加返回的Int
计算

如果没有它,您将始终收到
Maybe Int
,添加
Maybe Int
将始终返回
Maybe Int

注:
我上面的代码仅适用于
可能。使用默认的
用法说明,不适用于生产代码

关于您的问题:

  • String.fromInt
    返回
    可能Int
    ,这意味着值可以是
    仅Int
  • 您不能将例如
    just 1
    Nothing
    添加到一起,甚至不能将
    just 1
    just 2
  • 您需要以某种方式从
    仅1
    中提取数字,或者指定默认值(如果
    为Nothing
    )(例如0)
  • 这就是
    可能的地方。默认情况下,
    很方便。它可以从任何
    可能是Int
    中提取
    Int
    (无论它是
    还是
    )。它需要两个参数:

    • 第一个是当第二个参数为
      Nothing
    • 第二个是实际的
      可能的
  • 因此,在您的代码中,您可以这样使用它:

    {model 
      | curNum = 
          String.fromInt <|
            (Maybe.withDefault 0 <| String.toInt model.curNum) 
            + (Maybe.withDefault 0 <| String.toInt model.mainNum)
    }
    
    {model
    |curNum=
    
    String.fromInt关于您的问题:

  • String.fromInt
    返回
    可能Int
    ,这意味着值可以是
    仅Int
  • 您不能将例如
    just 1
    Nothing
    添加到一起,甚至不能将
    just 1
    just 2
  • 您需要以某种方式从
    仅1
    中提取数字,或者指定默认值(如果
    为Nothing
    )(例如0)
  • 这就是
    可能的地方。使用默认值
    很方便。它可以从任何
    可能Int
    提取
    Int
    (无论是
    还是
    ),它需要两个参数:

    • 第一个是当第二个参数为
      Nothing
    • 第二个是实际的
      可能的
  • 因此,在您的代码中,您可以这样使用它:

    {model 
      | curNum = 
          String.fromInt <|
            (Maybe.withDefault 0 <| String.toInt model.curNum) 
            + (Maybe.withDefault 0 <| String.toInt model.mainNum)
    }
    
    {model
    |curNum=
    
    String.fromInt我已将按钮更改为使用int,我的AddNum代码更改为:{model | curNum=String.toInt((String.fromInt model.curNum)++(String.fromInt number))}但是我仍然需要将Int转换为字符串。同样的错误我使用AddNum函数创建一个数字,而不是add one我已经更改了按钮来处理Int,我的AddNum代码是:{model | curNum=String.toInt((String.fromInt model.curNum)+(String.fromInt number))}但是我仍然需要将Int转换成字符串。同样的错误我使用AddNum函数来创建一个数字,而不是添加一个