Сначала я заметил функцию с завершающим восклицательным знаком/ударом (!), проходя через учебник Phoenix (в разделе Входящие события)
def handle_in("new_msg", %{"body" => body}, socket) do
broadcast! socket, "new_msg", %{body: body}
{:noreply, socket}
end
Что означает завершающий восклицательный знак? Он что-то делает? Я искал и искал, но я не уверен, что использую правильные условия. Пока кажется, что функция только как соглашение вызовет ошибку, если она терпит неудачу, но всегда она всегда означает это.
Единственные упоминания, которые я вижу из этого, появляются в "Программировании эликсира" Дейва Томаса:
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.
А также в документации он упоминает:
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...
Ни один из них не объясняет, является ли это конвенцией, что другие эликсиристы или алхимики или что-то другое. Пожалуйста, помогите.