【问题标题】:how can i access data inside map in elixir如何在 elixir 中访问地图内的数据
【发布时间】:2017-07-23 00:31:36
【问题描述】:

我有一个使用 phoenix 框架编写的简单聊天应用程序。

我想访问套接字中的一些数据

这是我使用的方法

def join("room:" <> _user, _, socket) do
    IO.inspect socket
    send self(), :after_join
    {:ok, socket}
  end

它将提供包含所有细节的漂亮地图。 使用此方法获取所有房间(主题:“房间:Testuser”)的最佳方法是什么

这是控制台中显示的示例结果

[info] JOIN room:Testuser to PhoenixChat.RoomChannel
  Transport:  Phoenix.Transports.WebSocket
  Parameters: %{}
%Phoenix.Socket{assigns: %{user: "Testuser"}, channel: PhoenixChat.RoomChannel,
 channel_pid: #PID<0.409.0>, endpoint: PhoenixChat.Endpoint,
 handler: PhoenixChat.UserSocket, id: nil, joined: false,
 pubsub_server: PhoenixChat.PubSub, ref: nil,
 serializer: Phoenix.Transports.WebSocketSerializer, topic: "room:Testuser",
 transport: Phoenix.Transports.WebSocket, transport_name: :websocket,
 transport_pid: #PID<0.375.0>}
[info] Replied room:Testuser :ok

【问题讨论】:

  • 在这个例子中你想要获得什么价值不是很清楚 - 你能更明确一点吗?
  • topic: "room:Testuser" 这是我想要访问的值
  • 你的意思是像socket.topic

标签: phoenix-framework elixir phoenix-channels


【解决方案1】:

您正在修补的thing 不是每个说的映射。也就是我们通常所说的struct! Struct 是具有明确定义的字段的映射(类似于您可能从其他语言中知道的对象)。

正如您在检查时已经发现的那样,您可以读取所有键值对。

当你想访问结构的字段时,你可以说struct.field。请阅读 Elixir 网站上的教程了解更多信息。

【讨论】:

  • 我认为你不能在结构上使用 [] 语法,除非定义了 Access 行为...
猜你喜欢
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 2015-12-24
  • 2023-04-10
  • 2011-05-31
相关资源
最近更新 更多