值类型
整数,包括十进制(1234)、十六进制(0xcafe)、八进制(0o765)和二进制(0b1010)
浮点数
原子,原子是常量,用于表现某些东西的名字,它以冒号开头,其后更随一个原子单词或者Elixir运算符。我们会大量使用原子来标记值。
区间,被表示为 开始...结束,开始和结束可以是任意类型值。但是,如果你想便利区间中的值,其两端必须是整数。
正则表达式,写作~r{regexp}或者~r{regexp}opts
系统类型
pid和端口,pid是对本地或者远端进程的引用,而端口是读写资源的引用。
引用
收集类型
元组,表示一组有序元素的集合,如同所有的Elixir数据结构,一旦元组被创建就无法修改。如:{ 1, 2 }、{ :ok, 42, "next" }
列表,列表是一个链式数据结构,要么为空,要么由首部和尾部组成。首部包含一个值,尾部本身是一个列表。其适合线性遍历。
关键字列表,
散列表,散列表的每个条目的键是不同的,而关键字列表允许存在相同的键。散列表更高效,访问时同过键来访问值:
states = %{ "AL" => "Alabama", "WI" => "Wisconsin"} states["AL"] # "Alabama" 如果是原子类型,还可以使用点符号。 colors = %{ res: 0xff0000, green: 0x00ff00, blue: 0x0000ff } colors[:red] #0x0000ff colors.red #0x0000ff
二进制,
真值
true、false、nil。nil在布尔上下文会当作false对待。true和原子类型:true等价。
运算符
比较运算:a === b #严格相等 1 === 1.0 为假
a !== b #严格不等 1 !== 1.0 为真
a == b #值相等 1 == 1.0 为真
a != b #值不等 1 != 1.0 为假
a > b #正常比较
a >= b #正常比较
a < b #正常比较
a =< b #正常比较
布尔运算符:这些运算符优先计算第一个参数的真值。
a or b #a为真则真 否则求b
a and b
not a
松弛布尔运算符:这些运算符接受任意类型的值,任何除了nil或者false的值都被解释为真
a || b #若 a 为 truthy 则为 a,否则为 b
a && b #若 a 为 truthy 则为 b,否则为 a
!a
算术运算符:+ - * / div rem
整数除法返回浮点。采用div(a, b)可以求整数结果。rem是求余,其结果符号和第一个参数相同。
连接运算符:binary1 <> binary2 #连接两个二进制型(二进制包含字符串)
list1 ++ list2 #连接两个列表
list1 ++ list2 #返回list1中有单list2中没有的元素
in运算符:a in enum