[英]Pattern match on value of Map's key in elixir
我想模式匹配地图中的键的值
def handle_in("new_message", payload, socket) do
case payload.message do
"hello" -> broadcast! socket, "new_message", payload
end
{:noreply, socket}
end
[error] GenServer #PID<0.378.0> terminating ** (KeyError) key :message not found in: %{"message" => "hello", "name" => "x"} (chatroom) web/channels/lobby_channel.ex:9: Chatroom.LobbyChannel.handle_in/3 (phoenix) lib/phoenix/channel/server.ex:226: anonymous fn/4 in Phoenix.Channel.Server.handle_info/2 (stdlib) gen_server.erl:601: :gen_server.try_dispatch/4 (stdlib) gen_server.erl:667: :gen_server.handle_msg/5
当我发送%{"message" => "hello", "name" => "x"}
的有效负载时,会发生该错误,或者发送任何其他消息。
你的关键是"message"
而不是:message
。 使用: payload["message"]
def handle_in("new_message", payload, socket) do
case payload["message"] do
"hello" -> broadcast! socket, "new_message", payload
end
{:noreply, socket}
end
你也可以这样做:
def handle_in("new_message", %{"message" => message}, socket) do
case message do
# ...
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.