我有一个看起来像这样的模块:
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()函数?
答案 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)