2015-06-24 12 views

risposta

8

Non sono a conoscenza di un costruito in funzione di conversione per questo. Il modo in cui costruisci la tua soluzione dipende da cosa vuoi ottenere. Considerate la vostra applicazione:

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

Se vi ricordate che tutti i valori, ad eccezione nil e false restituiscono true nell'ambito di un'espressione condizionale, questo ha l'effetto che

iex> boolean_to_integer(0) 
1 

Se questo dovrebbe essere un problema , è possibile utilizzare una funzione multi-clausola che accetta solo booleani:

Naturalmente, è possibile tendono questo a proprio piacimento, per esempio accettare interi 0 e 1 così come nil si può fare:

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

Non intendi tutto, ma 'nil' e' false' valutano 'vero'? –

+0

Sì, lo so ;-) Grazie –

3

È possibile accorciarlo utilizzando la seguente sintassi, ma poiché non esiste un operatore ternario esplicito nella lingua, se la macro è ancora richiesta.

if boolean_variable, do: 1, else: 0

Fonte: Elixir quick reference

+0

si potrebbe anche fare 'boolean_variable && 1 || 0 '. Non sono sicuro se t è più pulito però :) –