Elixir是否允许defstruct调用同一模块中定义的函数?

时间:2018-03-15 12:57:42

标签: elixir

我有一个看起来像这样的模块:

defmodule Othello.Game do
  alias Othello.Game, as: Game
  alias Othello.Utils, as: Utils

  defstruct enabled_spaces: Utils.gen_list(Game.width() * Game.width(), fn _ -> false end),
            is_game_over: false,
            is_first_player: true

  def width(), do: 8
end

是否可以使用 defstruct 调用 width()函数?

1 个答案:

答案 0 :(得分:2)

这是不可能的,因为定义module的{​​{1}}仍然需要编译,以便其功能正常工作,如下面的示例所示:

struct

替代:定义模块属性并改为使用:

iex(1)> defmodule A do
...(1)> def a, do: 1
...(1)> defstruct a: __MODULE__.a()
...(1)> end
** (UndefinedFunctionError) function A.a/0 is undefined (function a/0 is not available)
    A.a()
    iex:3: (module)