基础知识教程,受
的
启发编写。
欢迎你的反馈和参与
关于
是一种动态的函数编程语言,用来编写可扩展和易于维护的应用。
语言是构建在久经检验的
迟和高容错性的系统。
之上,可以方便地编写分布式、低延
特性
高并发
高容错性
函数式编程
可扩展
基础 →
基础
安装,基本类型和基本操作。
目录
安装
安装
交互模式
基本类型
整数类型
浮点类型
布尔类型
原子类型
字符串
基本操作
算术运算
布尔运算
比较
字符串插值
字符串拼接
安装
安装
各个 的安装说明可以在
网站上
部分找到。
安装后你可以很轻松的确认所安装的版本。
% elixir -v
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [async-threads:10]
[hipe] [kernel-poll:false] [dtrace]
Elixir 1.5.1
交互模式
自带了 iex 这样一个交互
可以让我们随时计算
表达式的值。
运行 iex 命令,让我们开始教程:
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [async-threads:10]
[hipe] [kernel-poll:false] [dtrace]
Interactive Elixir (1.5.1) - press Ctrl+C to exit (type h() ENTER for
help)
iex>
让我们继续输入几个简单的表达式试试:
iex> 2+3
5
iex> 2+3 == 5
true
iex> String.length("The quick brown fox jumps over the lazy dog")
43
如果你现在还无法理解所有的表达式,请不要担心,不过我们希望你能有所体会。
基本类型
整数类型
iex> 255
255
语言本身就支持二进制、八进制和十六进制的整数:
iex> 0b0110
6
iex> 0o644
420
iex> 0x1F
31
浮点类型
在
e 表示的科学计数:
语言中,浮点数要求小数点之前必须有至少一个数字;支持 位多精度和
iex> 3.14
3.14
iex> .14
** (SyntaxError) iex:2: syntax error before: '.'
iex> 1.0e-10
1.0e-10
布尔类型
支持 true 和 false 两种布尔值,除了 false 和 nil 之外所有的值都为
真。
iex> true
true
iex> false
false
原子类型
原子类型是名字和代表的值相同的常量,如果你熟悉
,它们和符号类型同义。
iex> :foo
:foo
iex> :foo == :bar
false
注意:布尔值 true 和 false 实际上就是对应的原子 :true 和 :false
iex> true |> is_atom
true
iex> :true |> is_boolean
true
iex> :true === true
true
模块的名字也是原子,即使实际上还不存在这个模块, MyApp.MyModule 是一个
合法的原子名称。
iex> is_atom(MyApp.MyModule)
true
原子也可以用来直接引用
标准库的模块,包括内置的模块。
iex> :crypto.strong_rand_bytes 3
<<23, 104, 108>>
字符串
的字符串是
编码的,用双引号包住:
iex> "Hello"
"Hello"
iex> "dziękuję"
"dziękuję"
字符串支持换行符和转义字符:
iex> "foo
...> bar"
"foo\nbar"
iex> "foo\nbar"
"foo\nbar"
还包含很多复杂的数据类型。当我们学到集合和函数的时候我们会学到更多关于
支持基本的 + 、 - 、 * 、 / 操作符,不过要注意 / 的结果是浮
这方面的知识。
基本操作
算术运算
如你所想,
点数。
iex> 2 + 2
4
iex> 2 - 1
1
iex> 2 * 5
10
iex> 10 / 5
2.0
如果你需要整数除法和求余,
提供了两个函数:
iex> div(10, 5)
2
iex> rem(10, 3)
1
布尔运算
提供了 || 、 && 和 ! 布尔操作符,它们支持任何类型的操作:
iex> -20 || true
-20
iex> false || 42
42
iex> 42 && true
true
iex> 42 && nil
nil
iex> !42
false
iex> !false
true
还有三个操作符( and 、 or 、 not ),它们的第一个参数 必须 是布尔类型
( true 和 false )
iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (ArgumentError) argument error: 42
iex> not 42
** (ArgumentError) argument error
比较
有我们习惯的一切比较运算符 : ==
!=
===
!==
<=
>=
< 和 > 。
iex> 1 > 2
false
iex> 1 != 2
true
iex> 2 == 2
true
iex> 2 <= 3
true
对于整数和浮点数的严格比较,可以使用 === :
iex> 2 == 2.0
true
iex> 2 === 2.0
false
有一个很重要的特性,那就是任意两个类型之间都可以进行比较,这在排序的时
候非常有用。我们没有必要去记住比较的优先级,但是知道了也没坏处 :
number < atom < reference < function < port < pid < tuple < map < list <
bitstring
这个特性可以导致一些非常有趣但是完全合法,而且在其他语言中很难看到的比较 :
iex> :hello > 999
true
iex> {:hello, :world} > [1, 2, 3]
false
字符串插值
如果你使用过
,那么
的字符串插值看起来会很熟悉:
iex> name = "Sean"
iex> "Hello #{name}"
"Hello Sean"
字符串拼接
使用 <> 操作符进行字符串拼接:
iex> name = "Sean"
iex> "Hello " <> name
"Hello Sean"
←
集合 →
集合
列表、元组、关键字列表(
(
)
)、图(
)、字典和函数组合子
目录
列表
列表拼接
列表减法
头 尾
元组
关键字列表
图
列表
列表是值的简单集合,可以包含不同的数据类型,而且可能包含相同的值。
iex> [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
内部用链表实现列表,这表明获取列表长度是 O(n) 的操作。同样的原因,在头
部插入比在尾部插入要快。
iex> list = [3.14, :pie, "Apple"]
[3.14, :pie, "Apple"]
iex> ["π"] ++ list
["π", 3.14, :pie, "Apple"]
iex> list ++ ["Cherry"]
[3.14, :pie, "Apple", "Cherry"]
列表拼接
列表拼接使用 ++/2 操作符:
iex> [1, 2] ++ [3, 4, 1]
[1, 2, 3, 4, 1]
关于上面使用到的 ++/2 格式的说明:在
中(以及
的基础语言
),