结构的默认值变量是否可以定义为函数而不是原始值?
答案 0 :(得分:7)
struct字段的默认值是在struct definition定义时计算的表达式。
证明:
# struct.exs
defmodule M do
defstruct [a: IO.gets("> ")]
end
# ...
$ iex struct.exs
Erlang/OTP 17 [erts-6.0] ...
> hello
Interactive Elixir (0.13.3-dev) - ...
iex(1)> %M{}
%M{a: "hello\n"}
您可以定义一个将创建结构的函数,并设置其中的一些字段:
# struct.exs
defmodule M do
defstruct [a: nil]
def new(val) do
%M{a: val}
end
end
# ...
M.new(123)
#=> %M{a: 123}