【问题标题】:What is "|>" in elixir? [duplicate]长生不老药中的“|>”是什么? [复制]
【发布时间】:2016-04-08 06:10:58
【问题描述】:

|> 在长生不老药中代表什么?

在从 Phoenix 生成的代码中提取的这段代码示例中,看起来 var |> function_call(a,b,c) 语法允许调用多个将 var 作为参数传递的函数,但我并不完全理解它是如何工作的。

defmodule HelloPhoenix.PostController do
  use HelloPhoenix.Web, :controller

  # ...

  def update(conn, %{"id" => id, "post" => post_params}) do
    post = Repo.get!(Post, id)
    changeset = Post.changeset(post, post_params)

    case Repo.update(changeset) do
      {:ok, post} ->
        render(conn, "show.json", post: post)
      {:error, changeset} ->
        conn
        |> put_status(:unprocessable_entity)
        |> render(HelloPhoenix.ChangesetView, "error.json", changeset: changeset)
    end
  end

  # ...
end

defmodule HelloPhoenix.Post do
  use HelloPhoenix.Web, :model

  # ...

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end

【问题讨论】:

    标签: elixir


    【解决方案1】:

    它是管道运算符。它获取左侧的结果并将其作为右侧的第一个参数提供。

    实际上,而不是做

    b = some(a)
    c = another(b)
    something_else(c)
    

    something_else(another(some(a)))
    

    你会的

    a
    |> some
    |> another
    |> something_else
    

    这是一种可视化函数链组合的更好方法。

    欲了解更多信息:http://elixir-lang.org/getting-started/enumerables-and-streams.html#the-pipe-operator

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 2019-07-30
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多