Ho notato una funzione con un trailing esclamazione marchio/Bang (!), Mentre passa attraverso il tutorial Phoenix (nella sezione Incoming Events)Che cosa sono le funzioni di Elixir Bang?
def handle_in("new_msg", %{"body" => body}, socket) do
broadcast! socket, "new_msg", %{body: body}
{:noreply, socket}
end
Cosa significa il punto esclamativo finale? Fa qualcosa? Ho cercato in giro e ho cercato di guardare ma non sono sicuro di usare i termini giusti. Finora sembra che la funzione solo come convenzione solleverà un errore se fallisce, ma lo fa sempre sempre.
L'menziona solo che vedo di apparire in "Programmazione Elixir" di Dave Thomas:
Identifiers in Elixir are combinations of upper and lower case ASCII
characters, digits, and underscores. Function names may end with a
question mark or an exclamation point.
E anche in the documentation si parla:
Notice that when the file does not exist, the version with ! raises an
error. The version without ! is preferred when you want to handle
different outcomes using pattern matching...
Nessuno di questi spiega se questa è una convenzione che altri elisiristi o alchimisti o qualunque uso. Per favore aiuto.
Grazie per il tempo dedicato a fornire un buon esempio dalla fonte di Phoenix. Risponde perfettamente alla mia domanda. Ero bloccato tra la tua risposta e quella che ho scelto perché entrambi spiegavano bene la mia domanda. Ho scelto di non selezionare questo solo perché si concentra sull'uso di Phoenix del '!' E, sfortunatamente non espresso nella mia domanda, sono interessato alle convenzioni di Elisir un po 'più di Phoenix. – Marc
Mangerò le mie stesse parole - e accetterò la tua risposta perché sottolinea un dettaglio importante come menzionato da @MoxleyStratton - "La convenzione bang si applica alle situazioni in cui ci sono due versioni di una funzione - una che solleva un'eccezione (la versione bang), e uno che non lo fa. " – Marc