Erlang 从零 · 第 07 课(展开目录)
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 0730 分钟
用 case 选一条路
让一个值依次匹配分支,再用 guard 补充条件。
01 · 先看完整例子
先用 case 看清分支顺序
把 Score 改成 95 和 40,再分别运行。
Erlang
%% 清掉旧绑定,再设置本次分数
f().
Score = 76.
%% case 从上到下寻找第一个匹配分支
Message =
case Score of
Value when Value >= 90 -> very_good;
Value when Value >= 60 -> pass;
_Other -> try_again
end.
%% 查看选中的 atom
Message.先对照结果
76得到 atompass。95得到very_good。40得到try_again。
02 · 回头拆代码
从第一行往下读
case Score of表示接下来让Score与各分支匹配。- 前两个分支后用分号,因为后面还有分支;最后一个分支不加分号。
end.的句点结束整个case表达式。
03 · 认清新符号
符号不是暗号
;这个 case 分支结束,后面还有分支。
end.结束整个 case 表达式。
_Other能匹配任何值;下划线开头表示不会再使用。
04 · 代码里的概念
把名字和意思对上
case 分支
针对一种输入形状写的一条规则。第一个匹配分支会被选中。
guard
when 后的附加条件,如 when Score >= 60。
兜底
最后处理其余输入的分支,避免意外值无人处理。
05 · 再说清楚
这些写法为什么有用
case 先取得一个值,再从上到下寻找第一个匹配分支。
分支之间用分号 ;。最后一个分支后不加分号,整个 case 用 end. 结束。
when 后的 guard 给模式再加一个简单条件。
06 · 自己改一次
合上答案,动手
根据天气 atom 选择动作:rain 返回 umbrella,sunny 返回 hat,其余返回 look_up。
练习起点
%% 清掉刚才的 Score、Message 和旧 Weather
f().
%% 改成其他 atom 再试
Weather = rain.
case Weather of
____ -> umbrella;
____ -> hat;
____ -> look_up
end.目标结果: rain 得到 umbrella,sunny 得到 hat。
卡住了,再看提示
前两处是固定 atom;最后用 _Other 接住其他值。
运行过以后,再看一种答案
一种答案
%% f() 只在 shell 中使用
f().
%% Weather 是要匹配的 atom
Weather = rain.
case Weather of
rain -> umbrella;
sunny -> hat;
_Other -> look_up
end.想一想:最后一个 `case` 分支后还要加分号吗?
不要。分号表示后面还有分支;最后一个分支直接接 end.。
带走
记住三句
- 1
case从上到下选择第一个匹配分支。 - 2
匹配从上到下,顺序会影响结果。
- 3
分号连接分支,
end.结束整个case。
本课结束代码也跑过一次,就把这一课收好。