2017-02-02 15 views
0

私は構造体を定義しようとしている。このモジュールがあります。なぜエラー - 未定義の関数defstruct

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

なぜエラー?

undefined function defstruct/2 

このエラーはなぜですか?

答えて

3

エリクサーはそれがundefined function defstruct/2/2一部だ、2つの引数でdefstructを呼び出すようdefstruct :id, :nameを解釈します。あなたが何をしたいか

はdefstructする単一の引数、フィールド名のリストを渡すことです:

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

ちょうどその問題でofficial documentationをご確認ください。

大括弧なしで表記を使用できますが、明示的でキーワードリストを提供しています。たとえば、デフォルト値があります。

あなたのケースでは、:id, :nameはキーワードリストではないので、コンパイラが2つの引数を指定するというエラーが発生します。

あなたが希望の場合:それは完全に正常に動作します

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

明示的にリストを使用してください。

関連する問題