Unicode and code point
- is_binary/1 : 判断是否为binary
- ?a :查看字母a的code point
- byte_size/1 :查看字符的字节长度
- 查看字符binary的存储方式
- 通过拼接null byte <<0>> 的方式
iex> "hello" <> <<0>>
- IO.inspect/2函数
iex> IO.inspect("hełło", binaries: :as_binaries) <<104, 101, 197, 130, 197, 130, 111>>
- 通过拼接null byte <<0>> 的方式
Bitstring
- bitstring 是 Elixir 中的基础数据类型之一,
- 语法格式是:
<<>>
- bitstring格式的数据会作为一个连续序列存储在内存中
- 默认,8bit(一个字节)用来存储一个数字,用户可以通过
::n
或::size(n)
方法来声明要用几个字节来表示一个数字iex(25)> <<42>> "*" iex(26)> <<42>> == <<42::8>> true
- 默认,8bit(一个字节)用来存储一个数字,用户可以通过
Binary
-
一个Binary是一个由8位组成的 Bitstring 串,这意味着所有的binary都是bitstring,但是反之,并不是所有的bitstring都是binary。
-
is_bitstring/1 :判断是否为bitstring
-
is_binary/1:判断是否为binary
-
binary 和 bitstring 可以使用模式匹配
iex(1)> <<0, 1, x>> = <<1, 2, 3>> ** (MatchError) no match of right hand side value: <<1, 2, 3>> iex(1)> <<0, 1, x>> = <<0, 1, 3>> <<0, 1, 3>> iex(2)> x 3 iex(3)>
-
binary-size(n) 可以匹配 n 个字节,binary模式匹配
iex(3)> <<head::binary-size(2), rest::binary>> = <<1, 2, 3, 4>> <<1, 2, 3, 4>> iex(4)> head <<1, 2>> iex(5)> rest <<3, 4>>
-
<<head, rest::binary>>
,为binary模式匹配 -
<<head::utf8, rest::binary>>
: head为 utf8 模式匹配,rest 为 binary 模式匹配iex(1)> <<head, rest::binary>> = "banana" "banana" iex(2)> head 98 iex(3)> head == "b" false iex(4)> head == ?b true iex(5)> rest "anana" iex(6)>
string
- String.length/1
- String.codepoints/1
- String.graphemes/1
charlists
charlist 有2种展现方式,一个是整数list,另外一个是''
单引号包裹的字符串;
charlist 是一个整数的list,list里的整数全部对应着有效的code points。
""
双引号表示string,chalist literals 用''
单引号表示
一个charlist 包含整数code points,但是在打印时显示的是ASCII 范围内的单引号格式的code points
iex(21)> [104, 101, 108, 108, 111]
'hello'
iex(22)> is_list('hello')
true
将整数按照code point解释,总能让我们发现一些不可思议的行为。举个例子,如果你存储一个整数的list,其中所有的数值都在0-127范围内;iex默认会将这个list解释为一个charlist,并且将会展成对用的ASCII字符
<>
string可以使用 <>
操作符进行拼接,charlist 只能使用 ++
操作符进行拼接。