返回介绍

Structs( Structs)

发布于 2021-05-25 13:29:45 字数 1171 浏览 1034 评论 0 收藏 0

结构是在地图之上构建的扩展,提供编译时检查和默认值。

定义结构

要定义结构,使用defstruct构造 -

defmodule User do
   defstruct name: "John", age: 27
end

与defstruct一起使用的关键字列表定义了struct将包含哪些字段及其默认值。 结构取其定义的模块的名称。在上面给出的示例中,我们定义了一个名为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"}

Structs提供编译时保证,只允许通过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

要更新结构中的值,我们将再次使用我们在map章节中使用的相同过程,

meg = %{john | name: "Meg"}

结构也可以用于模式匹配,既可以匹配特定键的值,也可以确保匹配值是与匹配值相同类型的结构。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文