使用 toInt 函数将字符串转换为 int
String to int conversion using toInt function
我正在尝试使用 String.toInt 将字符串转换为整数。但是,当我想将结果绑定到一个变量然后用它做一些简单的数学运算时,我得到了这个错误:
Function add
is expecting the 2nd argument to be:
Int
But it is:
Result String Int
如何只提取结果的整数部分?
toInt 可能无法解析。您需要使用 case 语句来检查它:
case toInt str of
Err msg -> ... -- do something with the error message
Ok val -> ... -- val is an Int which you can add
以下是在解析失败时如何为转换提供默认值。
String.toInt "5" |> Result.toMaybe |> Maybe.withDefault 0
也可以使用
拉出整数
Result.withDefault 0 (String.toInt "2")
您可以阅读更多相关信息here
根据 Elm String reference documentation,如果您从一些原始用户输入中提取数字,您通常会希望使用 Result.withDefault
来处理错误数据以防解析失败。您可以使用管道链接此操作以获得更清晰的代码:
String.toInt "5" |> Result.withDefault 0
使用地图:
answer = Result.map2 (+) (String.toInt "1") (String.toInt "2")
map2:
Apply a function to two results, if both results are Ok. If not, the
first argument which is an Err will propagate through.
将 add
结果作为字符串
resultAsString r =
case r of
Err msg -> msg
Ok value -> toString value
resultAsString answer
为了让事情更简单,您可以创建一个 addStrings
函数:
addStrings : String -> String -> Result String Int
addStrings a b =
Result.map2 (+) (String.toInt a) (String.toInt b)
您甚至可以完全使用 Result
类型:
addStrings : String -> String -> String
addStrings a b =
let
r =
Result.map2 (+) (String.toInt a) (String.toInt b)
in
case r of
Err msg ->
msg
Ok value ->
toString value
测试
import Html exposing (Html, text)
main : Html msg
main =
text (addStrings "1" "2")
output 3
withDefault
方法强制您定义一个可用于计算的值,但并不总是可以建立一个对错误有意义的值。大多数情况下,您需要所有可能的值,而默认值不适合。这里我提供一个结果类型检查函数,您可以使用它来决定是否使用转换后的值:
isErrorResult r =
case r of
Err msg ->
True
Ok value ->
False
你可以这样使用它:
r = String.toInt "20b"
if isErrorResult r then
-- not a valid Interger, abort or whatever
else
-- a good integer, extract it
a = Result.withDefault 0 r
-- and make good use of it
传递给 withDefault
的 default
值(在本例中为 0)没有意义,因为我们确保 r
不是 Err
.
您可以按如下方式进行。
---- Elm 0.19.0 ----------------------------------------------------------------
Read <https://elm-lang.org/0.19.0/repl> to learn more: exit, help, imports, etc.
--------------------------------------------------------------------------------
> parseInt string = String.toInt string
<function> : String -> Maybe Int
> resultParseInt string = \
| Result.fromMaybe ("error parsing string: " ++ string) (parseInt string)
<function> : String -> Result String Int
> resultParseInt "12"
Ok 12 : Result String Int
> resultParseInt "12ll"
Err ("error parsing string: 12ll") : Result String Int
>
我对大家的答案做了一些改动,因为它看起来属于 Maybe
isErrorResult : String -> Bool
isErrorResult r =
case String.toInt r of
Nothing -> True
Just value -> False
Maybe.withDefault 0 (String.toInt "42")
我正在尝试使用 String.toInt 将字符串转换为整数。但是,当我想将结果绑定到一个变量然后用它做一些简单的数学运算时,我得到了这个错误:
Function
add
is expecting the 2nd argument to be:Int
But it is:
Result String Int
如何只提取结果的整数部分?
toInt 可能无法解析。您需要使用 case 语句来检查它:
case toInt str of
Err msg -> ... -- do something with the error message
Ok val -> ... -- val is an Int which you can add
以下是在解析失败时如何为转换提供默认值。
String.toInt "5" |> Result.toMaybe |> Maybe.withDefault 0
也可以使用
拉出整数Result.withDefault 0 (String.toInt "2")
您可以阅读更多相关信息here
根据 Elm String reference documentation,如果您从一些原始用户输入中提取数字,您通常会希望使用 Result.withDefault
来处理错误数据以防解析失败。您可以使用管道链接此操作以获得更清晰的代码:
String.toInt "5" |> Result.withDefault 0
使用地图:
answer = Result.map2 (+) (String.toInt "1") (String.toInt "2")
map2:
Apply a function to two results, if both results are Ok. If not, the first argument which is an Err will propagate through.
将 add
结果作为字符串
resultAsString r =
case r of
Err msg -> msg
Ok value -> toString value
resultAsString answer
为了让事情更简单,您可以创建一个 addStrings
函数:
addStrings : String -> String -> Result String Int
addStrings a b =
Result.map2 (+) (String.toInt a) (String.toInt b)
您甚至可以完全使用 Result
类型:
addStrings : String -> String -> String
addStrings a b =
let
r =
Result.map2 (+) (String.toInt a) (String.toInt b)
in
case r of
Err msg ->
msg
Ok value ->
toString value
测试
import Html exposing (Html, text)
main : Html msg
main =
text (addStrings "1" "2")
output 3
withDefault
方法强制您定义一个可用于计算的值,但并不总是可以建立一个对错误有意义的值。大多数情况下,您需要所有可能的值,而默认值不适合。这里我提供一个结果类型检查函数,您可以使用它来决定是否使用转换后的值:
isErrorResult r =
case r of
Err msg ->
True
Ok value ->
False
你可以这样使用它:
r = String.toInt "20b"
if isErrorResult r then
-- not a valid Interger, abort or whatever
else
-- a good integer, extract it
a = Result.withDefault 0 r
-- and make good use of it
传递给 withDefault
的 default
值(在本例中为 0)没有意义,因为我们确保 r
不是 Err
.
您可以按如下方式进行。
---- Elm 0.19.0 ----------------------------------------------------------------
Read <https://elm-lang.org/0.19.0/repl> to learn more: exit, help, imports, etc.
--------------------------------------------------------------------------------
> parseInt string = String.toInt string
<function> : String -> Maybe Int
> resultParseInt string = \
| Result.fromMaybe ("error parsing string: " ++ string) (parseInt string)
<function> : String -> Result String Int
> resultParseInt "12"
Ok 12 : Result String Int
> resultParseInt "12ll"
Err ("error parsing string: 12ll") : Result String Int
>
我对大家的答案做了一些改动,因为它看起来属于 Maybe
isErrorResult : String -> Bool
isErrorResult r =
case String.toInt r of
Nothing -> True
Just value -> False
Maybe.withDefault 0 (String.toInt "42")