您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Elm 错误处理

是程序中的任何意外情况。可能在编译时或运行时发生。编译时发生在程序编译期间(例如,程序语法),而运行时发生在程序执行期间。与其他编程语言不同,Elm不会引发运行时。

考虑接受年龄的应用程序。如果年龄为零或负数,则应用程序应引发。种情况下,如果输入0或负值作为年龄,则Elm应用程序可以使用处理的概念在运行时显式引发。如果在程序执行期间发生任何意外情况,处理将指定处理措施。

Elm 编程语言通过以下方式处理

也许

结果

MayBe

考虑应用程序中的。如果找到关键字,则返回相关数据,否则不返回任何。可以使用MayBe类型在Elm中实现此用例。

语法

variable_name:MayBe data_type

类型MayBe的变量可以包含以下任意值-

Just some_Value-如果存在有效数据,则使用此。

Nothing-如果值不存在或未知,则使用此选项。在其他编程语言中,没有什么等效于null。

以下示例如何将MayBe类型与变量和一起使用。

第1步:

创建MayBeDemo.elm,并向其中以下

-- MayBeDemo.elm
module MayBeDemo exposing(..)
import Maybe

--declaring a MayBe variable and assigning value to it
userName : Maybe String
userName = Just "Mohtashim"

--declaring a MayBe variable and assigning value to it
userAge :Maybe Int
userAge = Just 20

--declaring a MayBe variable and assigning value to it
userSalary:Maybe Float
userSalary = Nothing

--declaring a custom type
type Country = India | China | SriLanka

--defining a function that takes a String parameter as input and returns a value of type MayBe

getCountryFromString : String -> Maybe Country
getCountryFromString p =
case p of
   "India"
      -> Just India
   "China"
      -> Just China
   "SriLanka"
      -> Just SriLanka
   _
      -> Nothing

第2步:

将模块导入elm repl并按如下所示执行

E:\ElmWorks\ErroApp> elm repl
---- elm-repl 0.18.0 -----------------------------------------------------------
:help for help, :exit to exit, more at 
--------------------------------------------------------------------------------
> import MayBeDemo exposing(..)
> userName
Just "Mohtashim" : Maybe.Maybe String
> userAge
Just 20 : Maybe.Maybe Int
> userSalary
Nothing : Maybe.Maybe Float
> getCountryFromString "India"
Just India : Maybe.Maybe MayBeDemo.Country
> getCountryFromString "india"
Nothing : Maybe.Maybe MayBeDemo.Country

该检查传递给该的值是印度还是中国或斯里兰卡。如果参数的值与任何都不匹配,则不返回任何值。

Result

考虑示例,其中应用程序需要验证某些条件并在不满足条件的情况下引发。Result类型可用于实现此目的。如果应用程序要显式引发并返回有关原因的详细信息,则应使用Result类型。

语法

Result类型声明有两个参数-的数据类型(通常为String)和一切正常的情况下要返回的结果的数据类型。

type Result error_type data_value_type = Ok data_value | Err error_message

Result 类型返回以下任一值-

确定 some_value 表示要返回的结果

Err-表示如果不满足预期条件,将返回的消息。

在Elm REPL中尝试以下示例-

> String.toInt
<function> : String -> Result.Result String Int
-- successful result
> String.toInt "10"
Ok 10 : Result.Result String Int
-- unsuccessful result , Error
> String.toInt "a"
Err " not convert string 'a' to an Int" : Result.Result String Int

如果传递的参数有效,则String.toInt将返回Integer值。如果参数不是数字,则该返回。

以下示例接受age作为参数。如果在0到135之间,则返回年龄,否则返回相应的消息。

第1步:

创建ResultDemo.elm,并向其中以下。

--ResultDemo.elm
module ResultDemo exposing(..)

userId : Result String Int
userId = Ok 10

emailId : Result String Int
emailId = Err "Not valid emailId"

isReasonableAge : String -> Result String Int
isReasonableAge input =
   case String.toInt input of
      Err r ->
         Err "That is not a age!"

   Ok age ->
      if age < 0 then
         Err "Please try again ,age can't be negative"
      else if age > 135 then
         Err "Please try agian,age can't be this big.."

   else
      Ok age

第2步:

将模块导入elm包并按如下所示执行

E:\ElmWorks\ElmRepo\15_ErrorHandling\15_Code> elm repl
---- elm-repl 0.18.0 -----------------------------------------------------------
:help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>
--------------------------------------------------------------------------------
> import ResultDemo exposing (..)
> userId
Ok 10 : Result.Result String Int
> emailId
Err "Not valid emailId" : Result.Result String Int
> isReasonableAge "10"
Ok 10 : Result.Result String Int
> isReasonableAge "abc"
Err "That is not a age!" : Result.Result String Int

联系我
置顶