Erlang 从零 · 第 02 课(展开目录)
01 · 先打开 erl02 · 先认常见 term03 · 分清两种文字04 · 变量只接一次05 · 拆开一列,再筛一次06 · 把文字安全变成整数07 · 用 case 选一条路08 · 让函数继续走09 · 把代码放进模块10 · 条件必须说真话11 · 一层一层取数据12 · 文字先说清编码13 · 让函数子句排好队14 · 带着累加器往前走15 · 先看值,再选路16 · 给模块立规矩17 · 让 rebar3 管项目18 · 让结果有固定形状19 · 把磁盘当成会失败的邻居20 · 把函数交给 list21 · record 留在院里22 · 先写模块之间的约定23 · 把 term 形状写出来24 · 小测试与整段路25 · 把应用磨成命令26 · 先把小项目圈住27 · 把真实文件洗干净28 · 公开入口越少越稳29 · 把约定留在源码旁30 · 打包,也留下线索31 · 按最初任务交卷
ERLANG · 试跑 · LESSON 0225 分钟

先认常见 term

认识 number、atom、tuple、list 和 map。

01 · 先看完整例子

在 erl 里查看 term

先观察外形,再用 is_* 函数核对。

Erlang
%% 检查数字与 atom
{is_integer(12), is_float(12.5)}.
{is_atom(true), is_atom(ok)}.

%% tuple 常把标签和数据放在一起
{ok, 42}.

%% map 用 key 标明值的意思
#{status => ready, score => 92}.
先对照结果
  • 前两行都得到 {true, true}。
  • 第三行显示 tuple {ok, 42}。
  • 最后显示一个有 status 和 score 两个 key 的 map。
02 · 回头拆代码

从第一行往下读

  1. is_integer(12) 和 is_float(12.5) 各检查一个值,返回真假。
  2. true 是表示“真”的 atom;它仍然属于 atom 类型。
  3. #{...} 创建 map。这里 status、ready 和 score 都是数量有限的标签。
03 · 认清新符号

符号不是暗号

ok

小写开头,是一个 atom 标签。

{ok, 42}

两个元素的 tuple,常用第一个 atom 标明结果类别。

#{status => ready}

map;=> 把 key 和 value 连起来。

04 · 代码里的概念

把名字和意思对上

01

term

Erlang 对运行时数据的总称。不同 term 有不同形状和用途。

02

atom

一个标签,常写成小写单词,如 ok。它的名字就是它的值。

03

tuple

花括号里的固定组合,如 {ok, 42}。

05 · 再说清楚

这些写法为什么有用

Erlang 把运行时的数据统称为 term。数字、atom、tuple、list、map 都是 term。

小写开头的单词通常是 atom,如 ok、rain。true 和 false 在 Erlang 里也是 atom。

Erlang 没有一个语言内建的 nil。项目可以约定用 undefined、none 或别的 atom 表示缺失,但要写清约定。

06 · 自己改一次

合上答案,动手

补出一个天气 map:天气用 atom,温度用整数。

练习起点
%% key 写 weather 和 temperature
#{____ => cloudy, ____ => 28}.

目标结果: 得到 #{weather => cloudy, temperature => 28}。

卡住了,再看提示

两个空依次填 atom weather 和 temperature。

运行过以后,再看一种答案
一种答案
%% atom key 说明两个值各自是什么
#{weather => cloudy, temperature => 28}.
想一想:Erlang 里的 `true` 是一种独立类型吗?

不是。true 是 atom,只是大家约定用它表示真。

带走

记住三句

  1. 1

    Erlang 运行时数据统称为 term。

  2. 2

    atom 适合做数量有限的标签,如 ok、ready、cloudy。

  3. 3

    tuple 和 map 都能装多个值,但 map 会给字段起名。

本课结束代码也跑过一次,就把这一课收好。