Elixir 正确的结构定义

Elixir 正确的结构定义,elixir,Elixir,如何以正确的方式定义结构,请查看以下代码段: defmodule SapOdataService.Worker do defstruct uri: "", user: nil, password: nil 我应该将默认值定义为nil还是?您有几个选项 对于空白值,可以使用nil显式列出键值对 defmodule User do defstruct name: "zero_coding", age: nil end 您可以传递一个原子列表,该列表将全部默认为零: defmodule

如何以正确的方式定义结构,请查看以下代码段:

defmodule SapOdataService.Worker do
  defstruct uri: "", user: nil, password: nil

我应该将默认值定义为nil还是?

您有几个选项

  • 对于空白值,可以使用
    nil
    显式列出键值对

    defmodule User do
      defstruct name: "zero_coding", age: nil
    end
    
  • 您可以传递一个原子列表,该列表将全部默认为零:

    defmodule User do
      defstruct [:name, :age]
    end
    
    defmodule User do
      defstruct [:age, name: "zero_coding"] 
    end
    
  • 您可以混合使用上面的原子列表,这些原子都默认为零:

    defmodule User do
      defstruct [:name, :age]
    end
    
    defmodule User do
      defstruct [:age, name: "zero_coding"] 
    end
    
  • 您还可以强制在创建结构时必须指定的特定键

    defmodule User do
      @enforce_keys [:name]
      defstruct [:name, :age]
    end
    

  • 根据您的用例,您可以定义自定义默认值,或者只将原子列表传递给
    defstruct
    ,每个值都将有一个nil作为默认值,我想这在您的情况下可能是有意义的。什么意思取决于我的情况?嗯,有时候,对于
    url
    值来说,保留nil作为默认值是有意义的,有时将“”设为默认值是有意义的,有时将其设为空字符串等也是有意义的。这完全取决于您和您认为它更适合您的情况。您还可以将两者结合起来,编写类似于
    defstruct[:user,:password,url:]
    ,,所以你不必一遍又一遍地重复
    nil
    。非常感谢大家。这里输入3只适用于你先输入所有默认值(隐式
    nil
    ),然后是显式默认值的情况<代码>defstruct[名称:“零编码”,:age]给出错误。