Elixir中的枚举词

アレッ*_*ックス 8 elixir

我想在Elixir中创建一个枚举.可能吗?通过枚举我的意思是来自C/C++或Ruby或许多其他语言的枚举.我知道Enum模块,但这只是一个模块 - 基本上是函数的容器.

小智 9

如果我理解正确,您正在寻找一种在 Elixir 中使用枚举的方法。您可以使用 :atoms 作为键对 Map 实例执行此操作。

 weekdays = [:monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday]
    |> Enum.with_index 
    |> Map.new
Run Code Online (Sandbox Code Playgroud)

或者手动多一点

weekdays = %{
    monday: 0,
    tuesday: 1,
    wednesday: 2,
    thursday: 3,
    friday: 4,
    saturday: 5,
    sunday: 6}
Run Code Online (Sandbox Code Playgroud)

如果您使用 :atoms 作为键,则简写访问语法为:

iex> weekdays.monday
0
iex> weekdays.friday
4
Run Code Online (Sandbox Code Playgroud)

但是通常使用诸如 :error 或 :ok 之类的原子不需要您进行这些声明。


Pat*_*ity 8

你可以使用原子.对于静态分析,您可以定义仅接受某些值并在您的typespecs中使用它的类型.然后,您可以使用dialyxir检查您的代码.

@type state :: :a | :b | :c

@spec set_state(pid, state) :: :ok | {:error, term}
def set_state(pid, state)
  # ...
end

@spec get_state(pid) :: state
def get_state(pid)
  # ...
end
Run Code Online (Sandbox Code Playgroud)

  • 虽然它只是一个开发工具,但您在运行时不需要它,它不会在编译后的代码中留下任何痕迹。 (2认同)