下一步:先看懂 BEAM 进程
你已经写过模块、文件处理、测试和命令行作品。不必再回起跑线,直接看普通函数何时该变成有状态、会收消息的进程。
进入进程与信箱 →31 节短课分成 Scratch、Foundation、Intermediate 和 Project。每课先跑一个完整例子,再拆 term、符号和步骤,最后改一次。Foundation 完成后即可进入 BEAM;也可以继续做完单语言项目。
语言线先把顺序代码写稳。进程、监督与分布式留到 BEAM 主线。Java、Python、JavaScript 对照只在容易带错直觉的地方出现。
每课仍然先看要做什么,再把完整例子复制到 erl。Scratch 负责敢运行,Foundation 负责独立写模块,Intermediate 处理真实输入,Project 把它们合成一个作品。
看懂输入和结果。完成一段 5–15 行的小任务。
在 Erlang shell 里运行表达式,记住句末的点。
认识 number、atom、tuple、list 和 map。
看懂 charlist、binary,以及中文的 UTF-8 写法。
认识大写变量、单次赋值和模式匹配。
先用头尾模式拆 list,再用 list comprehension 筛出需要的值。
用 trim、匿名函数和 try/catch 处理合法与错误输入。
让一个值依次匹配分支,再用 guard 补充条件。
用空 list 停下,用头尾模式处理下一项。
把函数存进 `.erl` 文件,编译运行,并望见 BEAM 主线。
补齐集合、函数、控制流、模块和基础测试。
比较 term,组合布尔条件,分清相等与严格相等。
从 map 里的 list 读取值,再产生更新后的嵌套结构。
用 UTF-8 binary 保存中文,分清字节与字符。
在模块中用模式和 guard 写多个命名函数子句。
先手写尾递归求和,再用 `lists:foldl/3` 收拢 list。
用 `case` 匹配结果,用 `if` guard 选择第一条真条件。
用模块属性声明身份、导出、常量和 record 字段。
创建 Erlang 应用,写第一个模块,再用 EUnit 保存例子。
处理文件、错误边界、类型约定和项目工具。
用 `{ok, Value}` 与 `{error, Reason}` 统一成功和失败。
用 `file` 读写 binary,用 `io` 控制输出,不混淆两种边界。
用 `lists:map`、`filter` 与 `foldl` 组成清楚的数据流水线。
模块内部使用 record,对外用 map,避免 tuple 布局泄漏。
用 behaviour callback 定义接口,再写可替换实现。
用 `-type` 与 `-spec` 记录约定,让 Dialyzer 寻找矛盾。
用 EUnit 守住纯函数,用 Common Test 检查较长场景。
用 rebar3 profile 分开环境,再构建可执行 escript。
从需求、测试走到可运行、可打包的小程序。