Elixir 从零 · 第 25 课(展开目录)
01 · 先让代码说话02 · 先认六种值03 · 把值装起来04 · 从旧 list 生成新 list05 · 让形状对上06 · 用 case 做选择07 · 把文字安全变成整数08 · 拆开 &1 和管道09 · 把代码放进项目10 · 真假不只靠 true11 · 走进嵌套数据12 · 一字不一定一字节13 · 让函数按形状接活14 · 把一列数收成一个值15 · 给不同问题选不同路16 · 给 map 一张名片17 · 让项目自己验答案18 · 让成功和失败长得一样19 · 读写文件先管好路20 · 只算眼前需要的21 · 同一句话,不同做法22 · 先约好模块会做什么23 · 把数据形状写在门口24 · 测试不只看一条好路25 · 把项目磨成一个命令26 · 定下小项目边界27 · 把真实文字洗干净28 · 只开三扇门29 · 把约定钉在代码旁30 · 打包,也留下脚印31 · 照任务书交卷
ELIXIR · 进阶 · LESSON 2545 分钟

把项目磨成一个命令

用 Mix 格式化、检查、构建 escript,并从终端运行。

01 · 先看完整例子

写一个最小命令入口

配置后运行 mix escript.build,再执行 ./hello_cli 小满。

Elixir
defmodule HelloCli do
  # args 是终端传入的字符串 list
  def main([name]), do: IO.puts("你好,#{name}")
  def main(_), do: IO.puts("用法:hello_cli 名字")
end

# mix.exs 的 project/0 返回值中加入
escript: [main_module: HelloCli]
先对照结果
  • 终端打印 你好,小满。
  • 参数数量不对时打印用法。
02 · 回头拆代码

从第一行往下读

  1. main/1 用函数子句区分正确参数与其他输入。
  2. mix.exs 告诉构建工具入口模块。
  3. 交付前按顺序运行格式检查、测试和构建。
03 · 认清新符号

符号不是暗号

mix format

按项目规则格式化源码。

mix escript.build

构建配置好的 escript。

main(args)

接收终端参数 list 的入口。

04 · 代码里的概念

把名字和意思对上

01

escript

Erlang/Elixir 提供的脚本打包格式,可从终端作为一个文件运行。

02

入口函数

命令启动时首先调用的函数;escript 使用 main/1。

05 · 再说清楚

这些写法为什么有用

项目写完函数还不算交付。别人需要一条稳定命令,也需要一致格式和能重复运行的检查。

mix format --check-formatted 检查格式,mix test 检查行为。escript 把 BEAM 程序包装成终端可执行文件。

escript 仍需要目标机器安装 Erlang 运行时。若要完全独立发布,要学习 release;此处先守住小项目边界。

06 · 自己改一次

合上答案,动手

把无参数提示改成 "请给一个名字"。

练习起点
def main([]), do: IO.puts(____)

目标结果: 无参数运行时打印 请给一个名字。

卡住了,再看提示

空处填写一个字符串。

运行过以后,再看一种答案
一种答案
# 空 list 表示没有终端参数
def main([]), do: IO.puts("请给一个名字")
想一想:escript 是否自带完整 Erlang 运行时?

不是。它打包应用代码,但目标机器仍需可用的 Erlang 运行时。

带走

记住三句

  1. 1

    格式、测试、构建都应可重复。

  2. 2

    escript 的入口是 main/1。

  3. 3

    命令既要处理正确参数,也要给出清楚用法。

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