函数是干嘛的
答案:进行数据转化,得到你想要的数据的的,举个栗子
你有大家考试的成绩单(数据),但是你想排个序(转化),得到一个成绩排名(想要的数据)。
这个时候你可能需要一个排序的函数了。
函数长啥样子
答案:
- 匿名函数用fn关键字创建,形如
fn
parameter-list -> body
parameter-list -> body ...
end
- 命名函数必须写在模块里面,用def声明,形如
defmodule ModuleName do
def functionName(parameter-list) do
...
end
end
其中body,以及do...end的部分就是函数体(代码块)
如何编译运行
假设我们已经写好一个模块叫moduleA,并且把它保存为moduleA.exs,里面有一个模块moduleA以及方法functionB,如何执行方法呢?
- 初始进入命令行,未进入iex
iex moduleA.exs
iex>moduleA.functionB parameter-list
- 已进入iex
iex> c "moduleA.exs"
iex>moduleA.functionB parameter-list
如何写漂亮的Elixir函数
函数就是做各种数据转换,转换的时候我们需要依据一定的规则(流程控制)进行数据的变换(运算)
其中流程控制有我们之前提到过的模式匹配,哨兵子句,还有我们在其他语言里面已经很熟悉的if,但这次都不会具体聊这些。
我其实只想聊一下,怎么让函数变漂亮
假设我们选择有几个函数,order_by_grade,fetch_top_ten,select_by_subject,
已经一份未排名的各科成绩单 grade_list,要得到数学成绩前十名的信息
大概我们会这么做
fetch_top_ten(order_by_grade(select_by_subject(math)))
这里想给大家抛出另一个优雅些的方式,对你不笨就是管道
select_by_subject(math)
|>order_by_grade()
|>fetch_top_ten()
管道是一种在linux常见的用法,把一个命令的输出结果,作为下一个命令的输入
在我们这里,就是|>运算符获得左边表达式的结果,并将其作为右边函数的第一个参数。
因为运算符优先级的问题(怀恋clojure),适当的时候需要对管道运算符前后的参数使用括号。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。