gpt4 book ai didi

elm - 如何访问 Elm 中的 Union 字段?

转载 作者:行者123 更新时间:2023-12-04 17:41:30 26 4
gpt4 key购买 nike

我正在学习编程语言 Elm。我想访问工会的特定领域。我无法访问它。我在文档中搜索过。但是我在任何地方都找不到如何访问联盟的特定领域。代码如下:

import Graphics.Element exposing (show)
import List exposing (length, filter, map)

type Person
= Person { fname: String, lname: String, age: Int}

p1 = Person { fname="ABC", lname="XYZ", age=23 }
p2 = Person { fname="JK", lname="Rowling", age=24 }

-- These are unions with fields

people : List Person
people = [ p1
, p2
, Person {fname= "Anakin", lname= "Luke", age= 12}
]

main = show [people]

我无法使用 p1.namep1不是记录。我如何访问该字段 fnamep1p2 ?

最佳答案

网站上的文档仍在不断改进,不同部分之间需要更多链接。您正在寻找的文档是 here .

案例表达

相关部分解释了联合类型可以有不同的标记值,因此您需要一个 案例表达区分不同的选项:

case p1 of
Person r -> r.fname

让表达式

由于在您的情况下只有一个选项,您还可以安全地在变量赋值中使用解构模式:
(Person p1Record) = p1
-- now p1Record is defined, and you can use p1Record.fname

小心使用 let 表达式

请注意,如果您将此分配技巧用于具有多个标签的联合类型,则会打开您的程序,直至运行时崩溃。如果您尝试解构的值不是正确的标签,则会发生崩溃:
type Direction
= Left
| Right
| Forward
| Back

march : Direction -> Boolean
march dir =
let
Forward = dir -- contrived example
in
True

main =
show (march Back) -- oops, runtime crash

最后说明

由于您的联合类型只有一个标签,您可能需要考虑使用 type alias反而。它只是为类型编写更好的名称的实用程序,但您不必解开它即可使用内部类型:
type alias Person 
= {fname: String, lname: String, age: Int}

p1 = {fname= "ABC", lname= "XYZ", age= 23}
-- p1.fname is immediately accessible

关于elm - 如何访问 Elm 中的 Union 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358764/

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