字典
散列表和散列字典都实现了 Dict
的行为。
关键字模块也实现了,但是关键字列表允许出现重复的值,但是要用 Keyword
模块才能访问。
1 | defmodule Demo do |
1 | iex> hd = [one: 1,two: 2,three: 3] |> Enum.into HashDict.new |
You are what you do.
散列表和散列字典都实现了 Dict
的行为。
关键字模块也实现了,但是关键字列表允许出现重复的值,但是要用 Keyword
模块才能访问。
1 | defmodule Demo do |
1 | iex> hd = [one: 1,two: 2,three: 3] |> Enum.into HashDict.new |
递归 才是处理列表的最佳工具。
列表可以通过管道运算符 |
来分隔头部和尾部。
1 | iex> [head | tail] = [1, 2, 3] |
0
1 | defmodule Demo do |
1 | iex> Demo.len [1,2,3,4,5] |
head变量没有被用到,可以使用_开头的变量名来消除编译警告(_head)。
上节接触到了匿名函数,这次了解下命名函数。
Elixir
的命名函数必须写在模块里。
定义模块
1 | defmodule Demo do |
通常单行使用do:语法,多行使用do…end语法。
命令提示符/终端时候用 iex
+ 文件
加载模块,iex
模式下用 c
+ 文件
1 | iex> c "E:\\Elixir_workspace\\hello.exs" |
看示例:求 n
的阶乘 (递归)
1 | defmodule Demo do |
1 | iex> Demo.of 5 |
有一点要注意,子句顺序不同会产生不同的结果。Elixir
会自上而下依次尝试,执行最先匹配的一项。
所以如果上述 def
位置交换将会行不通;第一个定义总是匹配,而第二个永远不会被调用。
Elixir
是函数式语言,所以函数式它的一种基本类型。
匿名函数用 fn 创建
fn parameter-list -> body parameter-list -> body ... end
一个参数列表(圆括号可省略),一个函数体,二者通过 ->
隔开。
1 | iex> sum = fn (a, b) -> a + b end |
调用的时候1
2iex> sum.(1, 2)
3
Elixir
内置类型有:
Elixir
里其实 函数 也是类型。
1 | iex> a = 1 |
看下以上代码,很简单吧?
把 1 赋值给 a,然后 a 加上 3 返回 4 。
但是在Elixir
里面不是这样,等号更像一种 断言(assertion) ,如果可以找到一种方式让左边等于右边,则执行成功;在Elixir
里面可以称之为匹配运算符 match operator
,参考如下代码:1
2
3
4
5
6iex> a = 1
1
iex> 1 = a
1
iex> 2 = a
** (MatchError) no match of right hand side vlaue: 1
“不要咖啡,不要大象,不要蟒蛇,不要红宝石,只要万金油。”
Elixir
,美式发音是[ɪˈlɪksɚ],翻译过来炼金药,长生不老药,万金油这个名字不错,我喜欢。
一种函数式编程语言,运行在工业级、高性能、分数式的Erlang虚拟机上。Elixir
继承了Erlang
在构建分布式系统上优点,并且通过添加众多现代化的编程语言的特性来提升语言表达能力。与Java等面向对象的编程语言不同,Elixir
是面向并发的编程语言。
Installer Download
Markdown语法和Next主题写博客
此标签将生成一个带上下分割线的引用,同时引用内文本将自动居中。 文本居中时,多行文本若长度不等,视觉上会显得不对称,因此建议在引用单行文本的场景下使用。
例如作为文章开篇引用 或者 结束语之前的总结引用。
1 | <!-- HTML方式: 直接在 Markdown 文件中编写 HTML 来调用 --> |
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.