Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struct Elixir:def结构,其中字段作为另一种结构类型的列表_Struct_Elixir - Fatal编程技术网

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
键不是结构列表。这是一个元组列表。另外,我也不确定你在这里干什么。长生不老药没有真正的类型系统。你可以把任何你想要的数据放进你的结构中。我在我的初始注释后注意到,这也是无效的语法(对于元组)。