Function Elixir:函数的结构默认值

Function Elixir:函数的结构默认值,function,struct,default-value,elixir,Function,Struct,Default Value,Elixir,是否可以将结构的默认值变量定义为函数而不是原始值?结构字段的默认值是在定义结构时计算的表达式 证明: # 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\

是否可以将结构的默认值变量定义为函数而不是原始值?

结构字段的默认值是在定义结构时计算的表达式

证明:

# 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}

你有没有一个如何使用这个的例子?据我所知,这是不可能的,但也许有一个替代的解决方案,可以满足您的需要。使用匿名函数不起作用?例如,您可以使用
defstructsum:&(&1+&2)
在模块
X
的结构中声明一个条目
sum
,然后可以调用
math=%M{};数学总结(1,2)#=>3