String Elm 0.19可能是默认值
我已经阅读了文档,但仍然不明白如何在代码中使用Maybe.withDefault。因为从String.toInt我得到的可能是Int,所以我不能使用+符号来添加我试图转换为整数的值。这是榆树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
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函数来创建一个数字,而不是添加一个