Elixir中的|>操作符号

起因

2016年第一天就在忙着写代码,对Scala的Play Framework,Java的SpringMVC和Clojure上的compojure的使用略感疲劳,配置真的有点太多了。

无意中看到了Phoenix这个项目,该项目是使用Elixir语言开发,颇有Ruby on Rails的意思。

当然使用框架,当然就需要找例子,所以发掘出了elixir-china这个项目,然后进行了一些测试,深感代码之精简,部署之方便。

但是看到其中有这么一段代码

  def changeset(user, params \\ nil) do
    user
    |> cast(params, ~w(name email admin password), ~w(score))
    |> validate_length(:name, min: 3)
    |> validate_length(:password, min: 6)
    |> unique_constraint(:name, name: :users_name_key)
    |> unique_constraint(:email, name: :users_email_index)
  end

对其中的|>操作符号不是很明白啥意思。


管道的思想

经过一些查找,Elixir称|>管道操作符号,就是将上一个操作的结果作为参数,向下传递。

def pp(x) do 
    :io_lib.format("~p", [x])
    |> :lists.flatten
    |> :erlang.list_to_binary
end

如此段代码可以翻译为这样的Erlang代码

pp(X) ->
  list_to_binary(lists_flatten(li_lib:format("~p),[X])))

不过需要注意的是,该操作符号是作为第一个参数,而非最后一个参数,传入下一个函数中。

你可能感兴趣的:(Phoenix,elixir,管道操作符号)