- Elixir 教程
- Elixir - 主页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 操作员
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 弦乐
- Elixir - 角色列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 地图
- Elixir - 模块
- Elixir - 别名
- Elixir - 功能
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举
- Elixir - 流
- Elixir - 结构
- Elixir - 协议
- Elixir - 文件 I/O
- Elixir - 流程
- 长生不老药 - 印记
- Elixir - 领悟
- Elixir - 类型规格
- Elixir - Behave
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 图书馆
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用的资源
- Elixir - 讨论
Elixir - 结构
结构是构建在映射之上的扩展,提供编译时检查和默认值。
定义结构
要定义结构,请使用 defstruct 构造 -
defmodule User do defstruct name: "John", age: 27 end
与 defstruct 一起使用的关键字列表定义了该结构将具有哪些字段及其默认值。结构体采用定义它们的模块的名称。在上面给出的示例中,我们定义了一个名为 User 的结构体。我们现在可以使用类似于创建映射的语法来创建用户结构 -
new_john = %User{}) ayush = %User{name: "Ayush", age: 20} megan = %User{name: "Megan"})
上面的代码将生成三个不同的结构体及其值 -
%User{age: 27, name: "John"} %User{age: 20, name: "Ayush"} %User{age: 27, name: "Megan"}
结构提供编译时保证,只有通过 defstruct 定义的字段(以及所有字段)才允许存在于结构中。因此,一旦在模块中创建了结构体,您就无法定义自己的字段。
访问和更新结构
当我们讨论地图时,我们展示了如何访问和更新地图的字段。相同的技术(和相同的语法)也适用于结构。例如,如果我们想更新我们在前面的示例中创建的用户,那么 -
defmodule User do defstruct name: "John", age: 27 end john = %User{} #john right now is: %User{age: 27, name: "John"} #To access name and age of John, IO.puts(john.name) IO.puts(john.age)
当上面的程序运行时,它会产生以下结果 -
John 27
要更新结构中的值,我们将再次使用在映射章节中使用的相同过程,
meg = %{john | name: "Meg"}
结构体还可以用于模式匹配,既可以匹配特定键的值,也可以确保匹配值是与匹配值类型相同的结构体。