【问题标题】:Elixir - Check if string is emptyElixir - 检查字符串是否为空
【发布时间】:2017-11-04 00:07:59
【问题描述】:

在关注Tutorial之后,我第一次玩ElixirPhoenix Framework..

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

聊天/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

我想阻止传入的空消息(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

我该怎么做?

【问题讨论】:

    标签: websocket elixir phoenix-framework


    【解决方案1】:

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

    您可以为此添加一个保护子句。 when body != ""when byte_size(body) &gt; 0

    def handle_in("new_msg", %{"body" => body}, socket) when body != "" do
      ...
    end
    

    现在这个函数只有在body 不是"" 时才会匹配。

    如果你还想处理空体情况,你可以像这样添加两个子句(不再需要保护子句,因为如果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
    

    【讨论】:

    • 是否可以返回某种错误而不是忽略这些消息?
    • 是的,您可以为"body" =&gt; "" 添加另一个子句。我已经编辑了我的答案以包含它。
    【解决方案2】:

    您可以使用@Dogbert 提出的答案,但要 100% 确保字符串不为空,您可以使用将 broadcast! 包装在辅助私有函数中,或者直接包装成 ifunless(如果) 表达式。

    unless String.trim(body) == "" do
      broadcast! socket, "new_msg", %{body: body}
    end
    

    如果您想返回错误消息,请尝试使用更复杂的内容,例如:

    if String.trim(body) != "" do
      broadcast! socket, "new_msg", %{body: body}
    else
      broadcast! socket, "error_msg", %{body: "Body is empty"}
    end
    

    【讨论】:

    • 谢谢! @Dogbert 解决方案是如此简单......所以我仍然不确定我是否真的需要返回错误消息或只是忽略这些消息,但最初我实际上是在寻找类似你的解决方案的东西......太糟糕了我不能接受这两个答案,因为两者都很棒!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2015-06-05
    • 2014-09-22
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多