Erlang 从零 · 第 25 课(展开目录)
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 2550 分钟
把应用磨成命令
用 rebar3 profile 分开环境,再构建可执行 escript。
01 · 先看完整例子
写一个最小入口模块
在 rebar.config 设置 escript 名与主应用,运行 rebar3 escriptize。
Erlang
-module(hello_cli).
-export([main/1]).
%% main/1 接收终端参数 charlist 列表
main([Name]) ->
io:format("hello, ~ts~n", [Name]);
main(_) ->
io:format(standard_error, "usage: hello_cli NAME~n", []).先对照结果
_build/default/bin/hello_cli A-Qing打印hello, A-Qing。
02 · 回头拆代码
从第一行往下读
- 两个函数子句分别处理一个参数与错误参数。
~ts按 Unicode 文字输出参数。- 测试 profile 只放测试专用配置,避免污染默认构建。
03 · 认清新符号
符号不是暗号
{profiles, [...]}.在 rebar.config 声明环境配置。
rebar3 as test ...在指定 profile 下运行任务。
rebar3 escriptize构建项目 escript。
04 · 代码里的概念
把名字和意思对上
profile
rebar3 中按环境覆盖依赖或配置的一组设置。
escript
可由 Erlang 运行时执行的单文件脚本包。
05 · 再说清楚
这些写法为什么有用
profile 让测试、开发等环境使用不同配置,不把临时工具带进正式构建。
escript 把应用代码包装成一个终端入口。入口模块导出 main/1,参数是字符串 list。
构建前依次格式化、测试、分析。命令还要处理参数错误并给出用法。
06 · 自己改一次
合上答案,动手
补全最小 profile,让测试环境定义宏 TEST。
练习起点
{profiles, [
{test, [
{erl_opts, [____]}
]}
]}.目标结果: 在 test profile 的 erl_opts 中加入 {d, 'TEST'}。
卡住了,再看提示
编译宏选项使用 tuple {d, 'TEST'}。
运行过以后,再看一种答案
一种答案
{profiles, [
%% 只在 test profile 定义 TEST 宏
{test, [
{erl_opts, [{d, 'TEST'}]}
]}
]}.想一想:escript 是否包含一套完全独立的 Erlang 运行时?
通常不包含。目标机器仍需要可用的 Erlang 运行时。
带走
记住三句
- 1
profile 隔离环境配置。
- 2
escript 入口是
main/1。 - 3
构建命令也要处理错误参数。
本课结束代码也跑过一次,就把这一课收好。