有没有更简洁的方法来转换true - > 1和false - > 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)
如果您在条件表达式的上下文中回想起除了nil和false求值的所有值,则会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)
您可以使用以下语法来缩短它,但是由于该语言中没有显式的三元运算符,因此仍然需要if宏。
if boolean_variable, do: 1, else: 0
资料来源:Elixir快速参考