đầu tiên tôi nhận thấy một chức năng với một dấu chấm than-mark/nổ trailing (!) Trong khi tiếp tục hướng dẫn Phoenix (trong phần Incoming Events)Chức năng Bang Elixir là gì?
def handle_in("new_msg", %{"body" => body}, socket) do
broadcast! socket, "new_msg", %{body: body}
{:noreply, socket}
end
nào dấu chấm than trailing nghĩa là gì? Nó có làm gì không? Tôi đã tìm kiếm xung quanh và thử tìm kiếm nhưng tôi không chắc mình đang sử dụng đúng thuật ngữ. Cho đến nay có vẻ như chức năng chỉ là quy ước sẽ gây ra lỗi nếu nó không thành công, nhưng nó luôn luôn có nghĩa là nó luôn luôn có nghĩa là.
Các chỉ đề cập đến tôi thấy nó xuất hiện trong "Lập trình Elixir" bởi 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.
Và cũng trong the documentation nó đề cập đến:
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...
Cả những giải thích nếu điều này là một quy ước rằng các elixirists khác hoặc các nhà giả kim hay bất kỳ việc sử dụng nào. Hãy giúp tôi.
Cảm ơn bạn đã dành thời gian để cung cấp một ví dụ điển hình từ nguồn Phoenix. Nó trả lời câu hỏi của tôi một cách hoàn hảo. Tôi đã bị mắc kẹt giữa câu trả lời của bạn và câu trả lời tôi chọn vì cả hai đều giải thích tốt câu hỏi của tôi. Tôi đã chọn không chọn cái này chỉ bởi vì nó tập trung vào việc sử dụng của Phoenix của '!' Và, tiếc là không thể hiện trong câu hỏi của tôi, tôi quan tâm đến Elixir có nhiều điều hơn Phoenix. – Marc
Tôi sẽ ăn từ của riêng tôi - và chấp nhận câu trả lời của bạn vì nó chỉ ra một chi tiết quan trọng như đã đề cập bởi @MoxleyStratton - "Quy ước bang áp dụng cho các tình huống có hai phiên bản của một hàm-- một phiên bản làm tăng ngoại lệ (phiên bản bang), và phiên bản không có. " – Marc