查看Progarmming Elixir Note的源代码
←
Progarmming Elixir Note
跳转到:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
=== Structs === 其实就是固定 key 的 Map,但是却没有 Dict 和 Access 访问协议,并且只能定义在 module。在后续的 protocol 多态中扮演重要角色。 Structs 当然可以嵌套。 Structs 已经无法继承 @derive Access 协议,elixir 1.1 版本废弃了 Access 协议。Struct 本质上是 Map,可以使用模式匹配、Map 模块 API 等: <pre> defmodule Subscriber do defstruct name: "", paid: false, over_18: true end iex(55)> s1 = %Subscriber{name: "dennis"} %Subscriber{name: "dennis", over_18: true, paid: false} iex(56)> %{s1 | name: "Green"} %Subscriber{name: "Green", over_18: true, paid: false} iex(57)> Map.get(s1, :name) "dennis" iex(58)> Map.put(s1, :name, "green") %Subscriber{name: "green", over_18: true, paid: false} </pre> 嵌套 struct,可以使用 put_in, update_in 来修改: <pre> defmodule Customer do defstruct name: "", company: "" end defmodule BugReport do defstruct owner: %{}, details: "", severity: 1 end iex(77)> report = %BugReport{details: "test", owner: %Customer{name: "dennis", company: "leancloud"}} %BugReport{details: "test", owner: %Customer{company: "leancloud", name: "dennis"}, severity: 1} iex(78)> report %BugReport{details: "test", owner: %Customer{company: "leancloud", name: "dennis"}, severity: 1} iex(79)> report.owner.name "dennis" iex(80)> report.owner.company "leancloud" iex(81)> put_in(report.owner.name, "green") %BugReport{details: "test", owner: %Customer{company: "leancloud", name: "green"}, severity: 1} iex(82)> update_in(report.owner.name, &("Mr." <> &1)) %BugReport{details: "test", owner: %Customer{company: "leancloud", name: "Mr.dennis"}, severity: 1} iex(83)> </pre>
返回到
Progarmming Elixir Note
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面