Elixir语言中 Kernel.SpecialForms.%struct{}
相关用法介绍如下。
用法:
%struct{}
(宏)
匹配或构建结构。
结构是一个标记的映射,它允许开发人员为键提供默认值,标签用于多态调度和编译时断言。
结构通常使用
宏定义:Kernel.defstruct/1
defmodule User do
defstruct name: "john", age: 27
end
现在可以按如下方式创建结构:
%User{}
结构下面只是一个映射,其中 :__struct__
键指向 User
模块:
%User{} == %{__struct__: User, name: "john", age: 27}
在构建结构时可以给出结构字段:
%User{age: 31}
#=> %{__struct__: User, name: "john", age: 31}
或者也可以在模式匹配上提取值:
%User{age: age} = user
还可以使用特定于结构的更新操作:
%User{user | age: 28}
结构的优点是它们验证给定的键是定义结构的一部分。下面的示例将失败,因为 User
结构中没有键 :full_name
:
%User{full_name: "john doe"}
上面的语法将保证给定的键在编译时是有效的,它会保证在运行时给定的参数是一个结构,否则会以
失败。BadStructError
尽管结构是映射,但默认情况下结构不实现为映射实现的任何协议。检查
以获取有关如何将结构与协议一起用于多态调度的更多信息。另请参阅Kernel.defprotocol/2
和Kernel.struct/2
,了解有关如何动态创建和更新结构的示例。Kernel.struct!/2
结构名称的模式匹配
除了允许对结构字段进行模式匹配,例如:
%User{age: age} = user
结构还允许对结构名称进行模式匹配:
%struct_name{} = user
struct_name #=> User
当您想检查某物是否是结构但您对其名称不感兴趣时,您还可以将结构名称分配给_
:
%_{} = user
相关用法
- Elixir Kernel.SpecialForms.%{}用法及代码示例
- Elixir Kernel.SpecialForms.case用法及代码示例
- Elixir Kernel.SpecialForms.for用法及代码示例
- Elixir Kernel.SpecialForms.quote用法及代码示例
- Elixir Kernel.SpecialForms.require用法及代码示例
- Elixir Kernel.SpecialForms.&expr用法及代码示例
- Elixir Kernel.SpecialForms.<<args>>用法及代码示例
- Elixir Kernel.SpecialForms.{args}用法及代码示例
- Elixir Kernel.SpecialForms.unquote_splicing用法及代码示例
- Elixir Kernel.SpecialForms.receive用法及代码示例
- Elixir Kernel.SpecialForms.import用法及代码示例
- Elixir Kernel.SpecialForms.left . right用法及代码示例
- Elixir Kernel.SpecialForms.alias用法及代码示例
- Elixir Kernel.SpecialForms.try用法及代码示例
- Elixir Kernel.SpecialForms.fn用法及代码示例
- Elixir Kernel.SpecialForms.cond用法及代码示例
- Elixir Kernel.SpecialForms.__aliases__用法及代码示例
- Elixir Kernel.SpecialForms.left :: right用法及代码示例
- Elixir Kernel.SpecialForms.unquote用法及代码示例
- Elixir Kernel.SpecialForms.with用法及代码示例
- Elixir Kernel.SpecialForms.__block__用法及代码示例
- Elixir Kernel.SpecialForms.^var用法及代码示例
- Elixir Kernel.round用法及代码示例
- Elixir Kernel.left / right用法及代码示例
- Elixir Kernel.put_in用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Kernel.SpecialForms.%struct{}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。