如果我具有以下结构:
defmodule Events.InviteEvent do
defstruct [
:event_id,
:invite_list
]
end
是否可以将:invite_list定义为具有其他结构类型的列表?基本上,我想用以下结构定义一个结构:
{
event_id: 123,
invite_list: [
{name: "jason", email: "myemail1@email.com"},
{name: "judy", email: "myemail2@email.com"}
]
}
答案 0 :(得分:1)
来自Structs:
结构提供了编译时保证,只有通过
defstruct
定义的字段(及其所有全部)才允许存在于结构中>
您获得的唯一保证是字段名称存在。无法指定值的类型。
您可以编写一个辅助函数来构建使用typespecs的结构,但这并不能给您任何额外的编译时或运行时保证。
答案 1 :(得分:0)
在实践中,我经常将列表添加到我的结构中。因此,假设您具有%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"}
]
如果您需要注意,invoke_list仅包含%Invite {}的列表,请使用结构的接口进行管理。