是否可以更新elixir中的嵌套关键字列表? 例如,我正在尝试进行以下工作
Keyword.put(conn.private.phoenix_endpoint.config(:url), :host, conn.host)
但不知何故,更新的主机未反映在conn
变量中。
答案 0 :(得分:2)
您可以使用Kernel.put_in/3,它可以使用地图和关键字列表的组合。
put_in(conn, [:private, :phoenix_endpoint, :config, :url, :host], conn.host)
编辑正如@manukall指出的那样,这不会在这种特殊情况下有效,因为conn.private.phoenix_endpoint
会返回一个模块而不是地图或关键字列表。
答案 1 :(得分:1)
这里的问题是,假设你在凤凰应用程序中,conn.private.phoenix_endpoint
将返回你的端点模块。所以你基本上是在呼叫MyApp.Endpoint.config(:url)
。您无法以这种方式更改该函数的返回值。
您可能会做的是覆盖phoenix_endpoint
中的conn.private
键,将其指向其他模块,但我不认为这是您想要做的。