1

Elixir Getting Started 2 Basic types

在之前的几章中,我们看到Elixir提供了+, -, *, /作为基本的算术操作符,外加函数div/2rem/2用来做整数的除法和余数运算。

Elixir也提供了++--操作符操纵列表。

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

字符串连接操作符<>:

iex> "foo" <> "bar"
"foobar"

Elixir也提供了布尔值操作符or, andnot. 这些操作符它们一个参数必须是一个布尔值(true或者false):

iex> true and true
true
iex> false or is_atom(:example)
true

非布尔值会导致异常:

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

orand是一对短路操作符. 只有当它们左侧的表达式不足以满足条件的时候才会执行右侧的表达式:

iex> false and error("This error will never be raised")
false

iex> true or error("This error will never be raised")
true

注意:如果你是Erlang的开发者, Elixir中的andor实际上是Erlang中的andalsoorelse操作符。

除此之外, Elixir也提供了 ||, &&!, 这些操作符接受任何类型的参数. 对于这些操作, 除了false和nil之外的所有值都为真:

# 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

简单来说,当你预期参数是布尔值的时候,用andornot。如果你不确定,那就使用||&&!
Elixir也提供了比较操作符==, !=, ===, !==, <=, >=, ><:

iex> 1 == 1
true
iex> 1 != 2
true
iex> 1 < 2
true

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

iex> 1 == 1.0
true
iex> 1 === 1.0
false

Elixir允许在不同类型之间进行比较:

iex> 1 < :atom
true

我们可以在Elixir在不同数据类型之间比较是本着实用主义, 有一个内建的不同类型之间的顺序, 所以算法在排序时无需担心数据类型上 的不同。下面就是内建的类型之间的顺序:

number < atom < reference < functions < port < pid < tuple < maps < list < bitstring

你并不需要去记忆这些顺序,重要的是了解的确有这么一个东西。

好了,简单介绍到这里。在下一章中,我们将讨论函数,数据类型之间的转换和流程控制。


lidashuang
6.7k 声望165 粉丝

$ Ruby/Elixir/Golang