在elixir中将boolean转换为integer

时间:2015-06-24 05:44:28

标签: elixir

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

SELECT ARRAY[ARRAY[1,2], ARRAY[3]]

ERROR:  multidimensional arrays must have array expressions with matching dimensions

2 个答案:

答案 0 :(得分:8)

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

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

如果您还记得除nilfalse之外的所有值在条件表达式的上下文中都计算为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)

当然,您可以根据自己的喜好对其进行扩展,例如接受整数01以及您可以执行的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

答案 1 :(得分:4)

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

if boolean_variable, do: 1, else: 0

来源:Elixir quick reference