2017-02-02 4 views

Antwort

3

Elixir interpretiert defstruct :id, :name als defstruct mit 2 Argumente nennen, dass die in undefined function defstruct/2/2 Teil ist.

Was Sie tun möchten, ist ein einziges Argument übergeben defstruct, eine Liste der Feldname:

defmodule A do 
    defmodule B do 
    defstruct [:id, :name] 
    end 
end 
2

einfach die official documentation in dieser Angelegenheit prüfen.

Sie können Notation ohne eckige Klammern verwenden, aber Sie müssen explizit sein und eine Keyword-Liste bereitstellen. In diesem Beispiel sind Standardwerte angegeben.

In Ihrem Fall :id, :name wird nicht Keyword-Liste sein und deshalb Compiler werfen einen Fehler, dass Sie dort zwei Argumente setzen.

Wenn Sie das tun würde:

defmodule A do 
    defstruct id: nil, name: nil 
end 

Es wäre funktioniert völlig in Ordnung.

Sonst explizit Liste verwenden.

Verwandte Themen