在elixir中将boolean转换为integer

Bat*_*u99 7 elixir

有没有更简洁的方法来转换true - > 1false - > 0而不是求助于

if boolean_variable do
  1
else
  0
end
Run Code Online (Sandbox Code Playgroud)

Pat*_*ity 10

我不知道内置转换功能.如何构建自己的解决方案取决于您想要实现的目标.考虑您的实施:

def boolean_to_integer(bool) do
  if bool, do: 1, else: 0
end
Run Code Online (Sandbox Code Playgroud)

如果您在条件表达式的上下文中回想起除了nilfalse求值的所有值,则会true产生这样的影响

iex> boolean_to_integer(0)
1
Run Code Online (Sandbox Code Playgroud)

如果这应该是一个问题,您可以使用只接受布尔值的多子句函数:

def boolean_to_integer(true), do: 1
def boolean_to_integer(false), do: 0

iex> boolean_to_integer(0)
** (FunctionClauseError) no function clause matching in MyModule.boolean_to_integer/1
    iex:42: MyModule.boolean_to_integer(0)
Run Code Online (Sandbox Code Playgroud)

当然,您可以根据自己的喜好扩展它,例如接受整数0,1以及nil您可以这样做:

def boolean_to_integer(true), do: 1
def boolean_to_integer(false), do: 0
def boolean_to_integer(nil), do: 0
def boolean_to_integer(1), do: 1
def boolean_to_integer(0), do: 0

iex> boolean_to_integer(0)
0

iex> boolean_to_integer(1)
1
Run Code Online (Sandbox Code Playgroud)


vzs*_*zsg 5

您可以使用以下语法来缩短它,但是由于该语言中没有显式的三元运算符,因此仍然需要if宏。

if boolean_variable, do: 1, else: 0

资料来源:Elixir快速参考

  • 你也可以做`boolean_variable && 1 || 0`。不过不确定它是否更干净:) (2认同)