【问题标题】:How to access the parameter passed through pipe operator in Elixir?如何访问 Elixir 中通过管道运算符传递的参数?
【发布时间】:2017-06-23 13:40:28
【问题描述】:

我对@9​​87654321@ 进行了一系列转换,需要访问中间结果。

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,因为在调用Plug.Conn.fetch_query_params() 之前不会设置conn.params。同样,我需要nn_conn,因为在调用assign/3 函数之前不会设置n_conn.assigns.result

代码相当难看。如果有办法引用管道运算符的输出,我可以将其简化如下。我希望&1 能够工作,但它没有。

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

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

【问题讨论】:

    标签: elixir


    【解决方案1】:

    如果您只想通过管道传递匿名函数,则可以传递匿名函数,但 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()
    

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 2017-05-25
      • 2023-03-16
      • 2017-04-21
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 2016-06-16
      • 2023-03-03
      相关资源
      最近更新 更多