我想在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 之类的原子不需要您进行这些声明。
你可以使用原子.对于静态分析,您可以定义仅接受某些值并在您的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)