【问题标题】:How can i access value inside map in phoenix elixir framework如何在 phoenix elixir 框架中访问地图内的值
【发布时间】:2017-08-01 11:28:54
【问题描述】:

我有message = %{"to" => "testuser", "value" => "asdads"} 地图。我需要访问此地图中“to”键的值

message.to
message[:to]
Map.fetch!(message, to)

目前没有任何效果

这是控制台错误信息

[error] GenServer #PID<0.395.0> terminating
** (KeyError) key :to not found in: %{"to" => "testuser", "value" => "aadadadad"}
    (phoenix_chat) web/channels/room_channel.ex:31: PhoenixChat.RoomChannel.handle_in/3
    (phoenix) lib/phoenix/channel/server.ex:225: 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
    (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: %Phoenix.Socket.Message{event: "message:new", payload: %{"to" => "testuser", "value" => "aadadadad"}, ref: "4", topic: "room:Pamidu"}
State: %Phoenix.Socket{assigns: %{user: "Pamidu"}, channel: PhoenixChat.RoomChannel, channel_pid: #PID<0.395.0>, endpoint: PhoenixChat.Endpoint, handler: PhoenixChat.UserSocket, id: nil, joined: true, pubsub_server: PhoenixChat.PubSub, ref: nil, serializer: Phoenix.Transports.WebSocketSerializer, topic: "room:Pamidu", transport: Phoenix.Transports.WebSocket, transport_name: :websocket, transport_pid: #PID<0.384.0>}

【问题讨论】:

  • message["to"]?
  • 声明也是 massage 而不是 message

标签: elixir phoenix-framework


【解决方案1】:

地图的键是字符串,而不是原子。您发布的所有三个代码 sn-ps 都将访问密钥 :to(原子),而不是 "to"(字符串)。

您可以通过message["to"] 访问该值。如果你想在值不存在时引发错误,你也可以使用Map.fetch!(message, "to")

【讨论】:

    【解决方案2】:

    你可以像下面那样做

    case Map.fetch(message,"to") do
       {:ok, value} -> IO.inspect value;           #Success  
       :error       -> IO.inspect "Key Not found"  #Error
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2015-11-06
      相关资源
      最近更新 更多