发布于 2016-01-02 10:34:41 | 117 次阅读 | 评论: 0 | 来源: PHPERZ
Elixir 函数式编程语言
Elixir 是一种函数式编程语言,建立在Erlang虚拟机之上。它是一种动态语言,灵活的语法与宏支持,利用Erlang的能力来构建并发、分布式、容错应用程序与热代码升级。
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])))
不过需要注意的是,该操作符号是作为第一个参数,而非最后一个参数,传入下一个函数中。