使用toInt函数的字符串到int转换

时间:2015-12-18 19:33:01

标签: elm

我正在尝试使用String.toInt将字符串转换为整数。但是,当我想将结果绑定到变量然后用它做一些简单的数学运算时,我得到了这个错误:

  

函数add期望第二个参数为:

Int
     

但它是:

Result String Int

如何提取结果的整数部分?

9 个答案:

答案 0 :(得分:32)

以下是解析失败时如何使用默认值提供转换。

String.toInt "5" |> Result.toMaybe |> Maybe.withDefault 0

答案 1 :(得分:27)

toInt可能无法解析。您需要使用案例陈述进行检查:

case toInt str of
  Err msg -> ... -- do something with the error message
  Ok val -> ... -- val is an Int which you can add

More about Result here

答案 2 :(得分:9)

也可以使用

拉出整数
with open(...) as flinkfile:
  for in in range(0,2):
    ...

您可以阅读更多相关信息here

答案 3 :(得分:3)

根据Elm String reference documentation,如果要从某个原始用户输入中提取数字,通常需要使用Result.withDefault来处理错误数据,以防解析失败。您可以使用管道链接此操作以获得更清晰的代码:

String.toInt "5" |> Result.withDefault 0

答案 4 :(得分:2)

Maybe.withDefault 0 (String.toInt "42")

答案 5 :(得分:1)

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

传递给default的{​​{1}}值(在这种情况下为0)毫无意义,因为我们确保withDefault不是r

答案 6 :(得分:0)

使用地图:

answer = Result.map2 (+) (String.toInt "1") (String.toInt "2")

map2

  

如果两个结果都正常,则将函数应用于两个结果。如果没有,那就是   第一个参数是一个Err将传播。

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

答案 7 :(得分:0)

您可以按照以下步骤进行操作。

---- 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
>

答案 8 :(得分:0)

我改变了一些答案,因为它似乎是Maybe类型的

isErrorResult : String -> Bool
isErrorResult r =
case String.toInt r of
    Nothing -> True
    Just value -> False