Elixir:来自函数的结构默认值

Posted

技术标签:

【中文标题】Elixir:来自函数的结构默认值【英文标题】:Elixir: struct default value from function 【发布时间】:2014-07-05 02:38:25 【问题描述】:

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

【问题讨论】:

你有一个如何使用它的例子吗?据我所知,这是不可能的,但也许有适合您需求的替代解决方案。 使用匿名函数不起作用?例如,您可以使用defstruct sum: &(&1 + &2) 在模块X 的结构中声明一个条目sum,然后您可以调用math = %M; math.sum.(1,2) #=> 3 【参考方案1】:

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

证明:

# 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
%Ma: "hello\n"

您可以定义一个函数来创建一个结构并设置它的一些字段:

# struct.exs
defmodule M do
  defstruct [a: nil]

  def new(val) do
    %Ma: val
  end
end

# ...

M.new(123)
#=> %Ma: 123

【讨论】:

以上是关于Elixir:来自函数的结构默认值的主要内容,如果未能解决你的问题,请参考以下文章

.NET ORM、不可变值对象、结构、默认构造函数和只读属性

C#中用户定义类的默认值

函数参数的默认值

结构函数和结构静态函数。 (Struct Static Fun 还是值类型吗?)

结构参数的默认值

使用当前 vue 组件的方法作为默认 prop 值