「笔记」Elixir 学习笔记
安装Elixir
Shell
终端中键入iex
/iex.bat
进入 Shell
键入两次Ctrl + C
退出Shell
在
Shell
中可以非常方便的练习和测试代码
使用Elixir
执行脚本
1 | # hello.exs |
elixir hello.exs
执行脚本文件
其他命令
1 | h trunc/1 # 查看 trunc/1 的帮助 |
基本类型
1 | 1 # 整型 |
基础运算
1 | # 数字 |
逻辑运算符
1 | # and or not 第一个值必须是布尔值 |
不同类型也可以进行比较
number < atom < reference < function < port < pid < tuple < map < list < bitstring
注意在
map
中,会按键升序比较值,同时整型<浮点
字符串
这里的字符串是
utf-8
编码的二进制位串,注意与列表区分
1 | # 字符串插值 |
列表
1 | # 可能也会表现出字符串的形式,实际上是列表 |
元组
1 | # 下标从0开始 |
使用列表还是元组
列表是以链表的形式存储,所以当连接两个列表时候,需要遍历左边的列表找到尾节点连接
元组是使用连续的内存,可以很方便的访问元素,但是更新或者添加元素会导致重新创建并生成新的元组
但是新元组中的元素不会每次重新创建,会共享未更改的内容以节省内存,元组和列表中的元素也会共享。也只有不可变的特性才可以实现
在计算结构中元素个数时候,如果是常量时间内就能得到结果的则命名为size
,如果是线性时间内得到结果的命名为length
。例如:tuple_size
, byte_size
; length
, String.length
类型判断
1 | is_boolean(true) # true |
匿名函数
1 | add = fn a, b -> a + b end # 定义一个匿名函数 |
模式匹配
1 | x = 1 # 赋值 |
模式匹配的左侧不允许进行函数调用
控制流
case
1 | case {1, 2, 3} do |
cond
1 | # 类似 if else if 注意这里除了 nil 和 false 都是true |
if
和 unless
1 | # if 条件是 nil/false 则不执行同时返回 nil, unless 则相反 |
注意在控制流中无法改变外面的变量,需要返回进行重新赋值
二进制型、字符串(位串)和字符列表*
Unicode
和 UTF-8
Unicode
包含了所有字符,每个字符都有对应的码点
UTF-8
是一种使用二进制存储Unicode
码点的编码,是一种可变长编码
1 | string = "héllo" |
二进制型和位串
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 粥盐籽!