Elixir更新嵌套关键字列表

时间:2015-11-27 07:20:35

标签: elixir

是否可以更新elixir中的嵌套关​​键字列表? 例如,我正在尝试进行以下工作

Keyword.put(conn.private.phoenix_endpoint.config(:url), :host, conn.host)

但不知何故,更新的主机未反映在conn变量中。

2 个答案:

答案 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键,将其指向其他模块,但我不认为这是您想要做的。