Elixir-检查字符串是否为空

ET-*_*-CS 2 elixir websocket phoenix-framework

按照本教程 .. 我正在玩Elixir并且Phoenix Framework是第一次。

我有一个简单的客户端/服务器应用程序。

chat / lib / chat_web / room_channel.ex:

defmodule ChatWeb.RoomChannel do
  use Phoenix.Channel

  def join("room:lobby", _message, socket) do
    {:ok, socket}
  end
  def join("room:" <> _private_room_id, _params, _socket) do
    {:error, %{reason: "unauthorized"}}
  end

  def handle_in("new_msg", %{"body" => body}, socket) do
    broadcast! socket, "new_msg", %{body: body}
    {:noreply, socket}
  end
end
Run Code Online (Sandbox Code Playgroud)

我想阻止空的传入消息(body为空字符串)

def handle_in("new_msg", %{"body" => body}, socket) do
  # I guess the code should be here..
  broadcast! socket, "new_msg", %{body: body}
  {:noreply, socket}
end
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Dog*_*ert 6

我想阻止空的传入消息(正文为空字符串)

您可以为此添加保护子句。无论是when body != ""when byte_size(body) > 0

def handle_in("new_msg", %{"body" => body}, socket) when body != "" do
  ...
end
Run Code Online (Sandbox Code Playgroud)

现在,此函数仅在body不匹配时匹配""

如果您还想处理空的主体大小写,则可以添加两个这样的子句(不再需要guard子句,因为如果body为空,则第二个子句将不再匹配):

def handle_in("new_msg", %{"body" => ""}, socket) do
  # broadcast error here
end
def handle_in("new_msg", %{"body" => body}, socket) do
  # broadcast normal here
end
Run Code Online (Sandbox Code Playgroud)