gpt4 book ai didi

elm - Elm 中的不透明类型是什么,为什么它很有值(value)?

转载 作者:行者123 更新时间:2023-12-03 23:35:08 24 4
gpt4 key购买 nike

我以前使用过类型,但不知道什么是不透明类型。我也看到提到过。公开不透明类型比公开类型别名更好吗?

最佳答案

让我们首先查看类型别名来回答这个问题:

类型别名是完全透明的。这意味着导入它的任何其他模块都可以完全访问其内部工作。假设我们有一个 User暴露 User 的模块类型:

module User exposing User

type alias User =
{ userName : String
, age : Int
}

任何进口 User可以操纵数据,例如 newUser = { oldUser | age = 25 } .或做 someUser = User "Bill" 27 .当您可以控制它们所在的上下文时,这些操作就很好。

但是,如果 User是库的一部分,然后对 User 的每次更改type 对使用该库的人来说是一个重大变化。例如,如果 email字段添加到 User ,那么构造函数示例( someUser = User "Bill" 27 )将给出编译器错误。

即使在项目代码库内部,类型别名也会为其他模块提供太多信息,从而导致代码难以维护和发展。也许是 User在某些时候发生巨大变化并具有一组全新的属性。这将需要在代码操作的任何地方进行更改 User s。

不透明类型很有值(value),因为它们避免了这些问题。这是 User 的不透明版本:
module User exposing User

type User =
User
{ userName : String
, age : Int
}

使用此版本,其他模块无法直接访问或操作数据。通常,这意味着您将创建和公开一些 getter 和函数:
initUser : String -> Int -> User
userName : User -> String
age : User -> String
setAge : Int -> User -> User

这是更多的工作,但它有优点:
  • 其他模块只关心User函数,并且不需要知道
  • 类型中的数据是什么
  • 可以在不破坏包含模块之外的代码的情况下更新类型


  • 这个解释大部分来自 @wintvelt : elmlang.slack.com

    关于elm - Elm 中的不透明类型是什么,为什么它很有值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40794368/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com