在 Elixir 中将布尔值转换为整数

问题描述 投票:0回答:3

有没有比诉诸更干净的方法来转换 true -> 1false -> 0

if boolean_variable do
  1
else
  0
end
elixir
3个回答
12
投票

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

def boolean_to_integer(bool) do
  if bool, do: 1, else: 0
end

如果您还记得,在条件表达式的上下文中,除了

nil
false
之外的所有值都计算为
true
,这会产生以下效果:

iex> boolean_to_integer(0)
1

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

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)

当然,您可以根据自己的喜好进行扩展,例如接受整数

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

8
投票

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

if boolean_variable, do: 1, else: 0

来源:Elixir 快速参考


0
投票

最短的:

boolean && 1 || 0
© www.soinside.com 2019 - 2024. All rights reserved.