Elixir入门教程-基本运算符

前面的章节,我们看到Elixir提供了 +,-,*,/ 4个算术运算符,另外还有整数的除法和取余的两个函数 div/2 和 rem/2 。

Elixir也提供了 ++ 和 - - 来操作列表:

1
2
3
4
iex> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]
iex> [1, 2, 3] -- [2]
[1, 3]

用 <> 把两个字符串串联起来:

1
2
iex> "foo" <> "bar"
"foobar"

Elixir也提供三个布尔运算符:or,and 和 not 。这些运算符严格要求布尔类型数据(true或false)作为它的第一个参数。

1
2
3
4
iex> true and true
true
iex> false or is_atom(:example)
true

如果参数不是布尔型数据则会引起异常:

1
2
iex> 1 and true
** (ArgumentError) argument error: 1

or和and都是短路运算符。如果左边不足以决定结果则它们才会执行右边的表达式:

1
2
3
4
iex> false and raise("This error will never be raised")
false
iex> true or raise("This error will never be raised")
true

注意:如果你是Erlang开发者,Elixir的 and 和 or 的确和Erlang里的 andalso 和 orelse 运算符相互映射影射。

除了这几个布尔运算符,Elixir还提供可以接收任何类型参数的 || ,&& 和 !。对于这几个运算符,除了 false 和 nil 其他所有值都被认为是true。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# or
iex> 1 || true
1
iex> false || 11
11
# and
iex> nil && 13
nil
iex> true && 17
17
# !
iex> !true
false
iex> !1
false
iex> !nil
true

根据经验,当你想要布尔值的时候就用and,or 和 not。如果有任何参数是非布尔值,则用&&,|| 和 !。

Elixir也提供 ==,!=,===,!==,<=,>=,< 和 > 作为比较运算符。

1
2
3
4
5
6
iex> 1 == 1
true
iex> 1 != 2
true
iex> 1 < 2
true

== 和 === 不同之处在于,后者在比较整数和浮点数的时候更严格。

1
2
3
4
iex> 1 == 1.0
true
iex> 1 === 1.0
false

在Elixir里,我们可以比较两个不同的数据类型:

1
2
iex> 1 < :atom
true

我们可以比较不同数据类型的原因是出于实用主义的考虑。排序算法不需要担心不同数据类型之间的排序问题。全部的排序顺序定义如下:

1
number < atom < reference < function < port < pid < tuple < map < list < bitstring

你完全不需要记住这个顺序,只需要知道有这个顺序存在就足够了。

有关运算符(和排序)的参考信息,请查阅 运算符手册页面

在下一章,我们将讨论一些基础函数,数据类型转换以及一些控制流。

原文链接: http://elixir-lang.org/getting-started/basic-operators.html