如何访问Elixir中通过管道运算符传递的参数?

时间:2017-02-06 14:56:48

标签: elixir

我在Plug.Conn上进行了一系列转换,需要访问中间结果。

n_conn = 
  conn
  |> Plug.Conn.fetch_query_params()
nn_conn =
  n_conn
  |> assign(:result, inspect(Timestamp.convert_datetime(n_conn.params)))
nn_conn
|> send_resp(200, nn_conn.assigns.result)
|> halt()

我需要n_conn因为conn.params在调用Plug.Conn.fetch_query_params()之前未设置。同样,我需要nn_conn因为n_conn.assigns.result在调用assign/3函数之前未设置。

代码相当丑陋。如果有一种方法可以引用管道操作符的输出,我可以像下面那样简化它。我希望&1可以工作,但事实并非如此。

conn
|> Plug.Conn.fetch_query_params()
|> assign(:result, inspect(Timestamp.convert_datetime(&1.params)))
|> send_resp(200, &1.assigns.result)
|> halt()

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果您只想通过管道执行此操作,则可以传递匿名函数,但it's ugly。我重复使用名称conn而不使用管道进行单个函数调用:

conn = Plug.Conn.fetch_query_params(conn)
conn = assign(conn, :result, inspect(Timestamp.convert_datetime(conn.params)))
conn
|> send_resp(200, conn.assigns.result)
|> halt()

由于您似乎没有使用conn.assigns.result,因此您可以跳过将其存储在assigns中:

conn = Plug.Conn.fetch_query_params(conn)
result = inspect(Timestamp.convert_datetime(conn.params))
conn
|> send_resp(200, result)
|> halt()
相关问题