2015-06-24 99 views

回答

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

難道你不是指一切,而是'nil'和'false'評估爲'true'? –

+0

是的,我確實;-)謝謝 –

3

您可以通過下面的語法縮短,但因爲在該語言中沒有明確的三元運算符,所以仍然需要一個if宏。

if boolean_variable, do: 1, else: 0

來源:Elixir quick reference

+0

你也可以做'boolean_variable && 1 || 0'。不知道是否清潔雖然:) –