Come si implementa questa espressione if-else in erlang?Come implementare if-else
if(a == b) {
expression1
} else {
expression2
}
Come si implementa questa espressione if-else in erlang?Come implementare if-else
if(a == b) {
expression1
} else {
expression2
}
if
a == b ->
expr1;
true ->
exprElse
end
non c'è nessun altro vero e proprio in Erlang, basta abbinare con vera. Maggiori informazioni allo Erlang documentation.
Devi prestare molta attenzione al ';' terminatore:
if
a == b ->
clauseN,
expr1;
cond2 ->
clause1,
clause2,
expr2;
cond3 ->
expr3;
true ->
exprElse
end
Non è un linguaggio compatibile con copia-incolla.
if
A =:= B ->
expr1;
true ->
expr2
end
o
case A =:= B of
true -> expr1;
false -> expr2
end
o
case A of
B -> expr1;
_ -> expr2
end
o
foo(A,B), ...
...
foo(X,X) -> expr1;
foo(_,_) -> expr2.
pattern matching è uno dei erlangs tanti punti di forza e spesso può essere usato al posto di if. Spesso è più leggibile per la corrispondenza del modello sugli argomenti della funzione o usa un'espressione caso (che è anche la corrispondenza del modello).
Supponiamo di avere una funzione some_function
che accetta due argomenti. Se gli argomenti sono uguali, valuti expression1, altrimenti valuti expression2. Questo può essere espresso in Erlang come:
some_function(A, A) -> expression1;
some_function(A, B) -> expression2.
E 'abbastanza incredibile quanto si può ottenere con questo tipo di semplici pattern matching. Con clausole di guardia è possibile esprimere i modelli più complessi, per esempio,
some_function(A, B) when A < B -> expression3.
Un'altra possibilità è quella di utilizzare un'espressione case .. of
. Il vostro esempio particolare si tradurrebbe in
case a == b of
true -> expression1;
false -> expression2
end.
(in questo caso expression2
sarebbe sempre essere valutati dal a
e b
sono atomi e mai uguali tra loro. Le variabili in Erlang sono maiuscole.)
Potete leggere altro sulle espressioni di Erlang here.
Ti suggerisco anche di usare' =: = ' di '=='. Questa è una buona risposta - i nuovi programmatori di erlang dovrebbero sempre usare 'case' finché non capiscono perché l'istruzione' if' avrebbe dovuto essere l'istruzione 'when'. – archaelus
Un'altra opzione:
case a of
b -> expr1; %% true
_ -> expr2 %% false
end.
Vedi anche [questa domanda] (http://stackoverflow.com/questions/4327860/erlang-equivalent-to-if-else). – legoscia