after严格保留字收尾或超时子句声明 try 的清理逻辑,或 receive 的超时分支。
在 try 中,after 里的代码无论成功或失败都会执行;在 receive 中,它为等待消息设置超时结果。
try do
work()
after
cleanup()
end两门语言的严格保留字完整收录,并把特殊形式、宏、模块属性和 预处理指令分开解释。搜英文,也可以直接搜“短路”“模式匹配” “异常”这样的中文概念。
默认只看严格保留字。需要找 defmodule、with 或 -module 时,切换到对应补充分类。
找到 44 项
点击上方分类,切换术语的真实语言层级15 个严格保留字,以及常用特殊形式和 Kernel 宏
after严格保留字收尾或超时子句在 try 中,after 里的代码无论成功或失败都会执行;在 receive 中,它为等待消息设置超时结果。
try do
work()
after
cleanup()
endand严格保留字严格布尔运算符左侧必须是 true 或 false;左侧为 false 时不会计算右侧。若要使用真值语义,可用 &&。
ready? and enabled?catch严格保留字捕获子句普通异常通常交给 rescue;catch 更适合处理 throw/1、进程退出和底层错误类别。
try do
throw(:stop)
catch
:throw, reason -> reason
enddo严格保留字代码块起点既可写成 do ... end 多行块,也可写成 do: expression 关键字参数形式。
if ready?, do: run()else严格保留字备选子句常见于 if、unless、with 和 try;它的具体匹配规则由所在构造决定。
if ok?, do: :yes, else: :noend严格保留字代码块终点Elixir 不依赖缩进闭合语法块;多行块必须使用 end 明确结束。
if ready? do
run()
endfalse严格保留字布尔字面量在 Elixir 的条件判断中,false 与 nil 是仅有的两个假值,其余值均为真值。
active? = falsefn严格保留字匿名函数匿名函数可以包含多个模式匹配子句,调用时需在变量名后使用点号。
double = fn x -> x * 2 end
double.(3)in严格保留字成员关系运算符常用于列表或范围成员检查,也可用于 guard;推导式中的生成器使用的是 <-,不要混为一谈。
2 in 1..3nil严格保留字空值字面量nil 是原子 :nil 的字面写法,常作为未找到或可选结果的空值。
result = nilnot严格保留字严格布尔运算符操作数必须是 true 或 false;若要使用真值语义取反,可使用 !。
not finished?or严格保留字严格布尔运算符左侧必须是 true 或 false;左侧为 true 时不会计算右侧。真值语义版本是 ||。
cached? or fetch?()rescue严格保留字异常子句可匹配指定异常结构,例如 ArgumentError;未匹配的异常仍会向外传播。
try do
risky()
rescue
ArgumentError -> :invalid
endtrue严格保留字布尔字面量true 是原子 :true 的字面写法,常用作条件结果或 cond 的兜底条件。
enabled? = truewhen严格保留字守卫子句守卫只能调用允许在 guard 中使用的运算符和函数,并在模式匹配之后进行检查。
def positive?(n) when n > 0, do: true29 个严格保留字,以及常见模块属性与预处理指令
after严格保留字超时或收尾子句receive after 可避免永久等待消息;try after 中的表达式会在离开 try 前执行。
receive
Msg -> Msg
after 1000 ->
timeout
endand严格保留字严格布尔运算符两侧都必须是布尔值,而且不会短路;需要短路时使用 andalso。
true and false. % falseandalso严格保留字短路布尔运算符它适合把前置检查与后续表达式串联,避免不必要或不安全的右侧计算。
N > 0 andalso N rem 2 =:= 0.band严格保留字位运算符常用于掩码、标志位和二进制协议字段处理。
6 band 3. % 2begin严格保留字表达式块表达式按顺序执行,以逗号分隔,整个 begin ... end 的值是最后一个表达式的值。
begin A = 1, A + 1 end.bnot严格保留字位运算符Erlang 整数精度不受固定位宽限制,因此结果遵循无限精度整数语义。
bnot 0. % -1bor严格保留字位运算符常用于合并多个独立的位标志。
4 bor 1. % 5bsl严格保留字位移运算符正数位移通常等价于乘以 2 的相应幂。
3 bsl 2. % 12bsr严格保留字位移运算符对负数执行算术右移,保留符号语义。
12 bsr 2. % 3bxor严格保留字位运算符对应位不同时结果位为 1,相同时为 0。
6 bxor 3. % 5case严格保留字模式分支case 表达式求值一次,然后按顺序尝试 of 后的模式和可选守卫。
case X of
0 -> zero;
_ -> other
end.catch严格保留字异常捕获既可作为旧式 catch Expression,也用于 try 的 catch 子句;新代码通常优先使用结构更清楚的 try。
Result = catch risky().cond严格保留字保留未使用它不能作为未加引号的原子、变量或函数名使用;条件分支请使用 case 或 if。
erl_scan:reserved_word('cond'). % truediv严格保留字算术运算符结果向零截断;除数为零会引发 badarith 错误。
7 div 2. % 3else严格保留字maybe 失败分支else 后使用模式子句选择失败结果;它是 maybe 表达式语法的一部分,而非通用 if-else。
maybe {ok, V} ?= fetch(), V else error -> missing end.end严格保留字表达式块终点Erlang 的多分支表达式都使用 end 明确闭合。
fun(X) -> X * 2 end.fun严格保留字匿名函数或函数引用匿名函数可以拥有多个模式子句;Module:Function/Arity 形式可捕获远程函数。
Double = fun(X) -> X * 2 end.if严格保留字守卫分支if 的条件是 guard 序列,不是任意表达式;没有分支命中会产生 if_clause 错误。
if N > 0 -> positive; true -> other end.let严格保留字保留未使用Erlang 通过模式匹配绑定变量;若需要名为 let 的原子,必须写成 'let'。
erl_scan:reserved_word('let'). % truemaybe严格保留字顺序匹配表达式适合串联多个可能失败的操作;可搭配 else 把失败值转换为统一结果。
maybe
{ok, V} ?= fetch(),
V
end.not严格保留字布尔运算符操作数必须是 true 或 false,否则会引发 badarg 错误。
not false. % trueof严格保留字模式子句引导词在 case 中连接待匹配表达式与子句;在 try 中可选择性处理主体的正常返回值。
case Value of ok -> done; _ -> retry end.or严格保留字严格布尔运算符两侧都必须是布尔值,而且不会短路;需要短路时使用 orelse。
false or true. % trueorelse严格保留字短路布尔运算符常用于提供兜底条件,并避免左侧已满足时执行有副作用或昂贵的右侧表达式。
Cached orelse filelib:is_file(Path).receive严格保留字进程消息接收消息按到达顺序扫描,只有匹配某个子句的消息才会被取出;可使用 after 设置超时。
receive
{ping, From} -> From ! pong
end.rem严格保留字算术运算符它与 div 配套,并满足 X = (X div Y) * Y + (X rem Y)。
7 rem 2. % 1try严格保留字异常处理表达式可组合 of、catch 和 after 子句,精确区分成功值以及 error、exit、throw 类别。
try risky() catch _:Reason -> {error, Reason} end.when严格保留字守卫子句守卫只能使用允许的 guard 表达式;它在模式匹配成功后决定子句是否可选。
abs(N) when N < 0 -> -N.xor严格保留字布尔运算符两侧都会计算且必须是布尔值;它不是整数位异或,整数位异或请使用 bxor。
true xor false. % trueElixir 语法高度宏化,同样一段自然语言般的代码,可能横跨词法、 特殊形式和普通宏三个层级。
编译器在词法阶段就赋予特殊含义,不能随意拿来当普通变量或函数名。本页默认先展示这一层。
Elixir: when · fn · do
Erlang: case · receive · funElixir 的语言基本构造,无法被开发者覆盖;但除 fn 外,它们大多不在严格保留字清单里。
case · with · receive
alias · quote · unquote写起来很像关键字,却属于 Kernel 宏、Erlang 模块属性或预处理器。理解这点,元编程就不再神秘。
defmodule · use · if
-module · -spec · -define清单以当前官方语言参考为准。Erlang 的 maybe 在 OTP 25–26 默认关闭,自 OTP 27 起默认开启;cond 与let 目前仍是“已保留但未使用”。