Struct Elixir:def结构,其中字段作为另一种结构类型的列表
如果我有以下结构:Struct Elixir:def结构,其中字段作为另一种结构类型的列表,struct,elixir,Struct,Elixir,如果我有以下结构: defmodule Events.InviteEvent do defstruct [ :event_id, :invite_list ] end 是否可以将:invite_列表定义为具有另一个结构类型的列表?基本上,我想用以下结构定义一个结构: { event_id: 123, invite_list: [ {name: "jason", email: "myemail1@email.com"},
defmodule Events.InviteEvent do
defstruct [
:event_id,
:invite_list
]
end
是否可以将:invite_列表定义为具有另一个结构类型的列表?基本上,我想用以下结构定义一个结构:
{
event_id: 123,
invite_list: [
{name: "jason", email: "myemail1@email.com"},
{name: "judy", email: "myemail2@email.com"}
]
}
发件人:
结构提供编译时保证,只允许通过defstruct
定义的字段(以及所有字段)存在于结构中
您得到的唯一保证是字段名存在。无法指定值的类型
您可以编写一个helper函数来构建使用的结构,但这不会给您任何额外的编译时或运行时保证。实际上,我经常向结构添加列表。因此,假设您有一个%Invite{}结构,我将编写如下内容:
defmodule Events.InviteEvent do
defstruct [
event_id: nil,
invite_list: []
]
end
然后根据需要进行填充
%Events.InviteEvent{
event_id: 123,
invite_list: [
%Invite{name: "jason", email: "myemail1@email.com"},
%Invite{name: "judy", email: "myemail2@email.com"}
]
如果需要注意invite_list只包含%invite{}的列表,请使用结构的接口来管理该列表 只是为了澄清一下,
:invite_list
键不是结构列表。这是一个元组列表。另外,我也不确定你在这里干什么。长生不老药没有真正的类型系统。你可以把任何你想要的数据放进你的结构中。我在我的初始注释后注意到,这也是无效的语法(对于元组)。