一、赋值时匹配
原子匹配
atom =atom % atom
another=another % another
atom =another % exception error
变量匹配
Var=2. % 2
Var=3 – 1. % 2
Var=1. % exception error
元组匹配
Attr={name, sloger}. % {name, sloger}
{name, Name}=Attr. % {name, sloger}
Name. % sloger
列表匹配
Langs=[perl, python, ruby, erlang].
[Head | Tail]=Langs.
Head. % perl
Tail. % [python, ruby, erlang]
参数匹配
sum([]) -> 0;
sum([H|T]) -> H + sum(T).
sum([1, 2, 3]). % 6
记录匹配
Post=#post{title=”Pattern Match in Erlang”,
slug=”pattern-match-in-erlang”,
body=”Bla bla bla…”,
author=sloger}.
#post{title=Title, slug=Slug}=Post.
Title. % “Erlang 中的模式匹配总结”
Slug. % “summary-of-pattern-match-in-erlang”
比特匹配
Red=5.
Green=23.
Blue=200.
Color=<<Red:5, Green:6, Blue:5>>.
<<R1:5, G1:6, B1:5>>=Color.
R1. % 5
G1. % 23
B1. % 200
二、流程控制中的匹配
if
if
Pattern1 [when Guard1] -> Expression1;
Pattern2 [when Guard2] -> Expression2;
%% and so on …
_ -> Expression3 % 匹配所有其它结果
end.
case
case Expression of
Pattern1 [when Guard1] -> Expression1;
Pattern2 [when Guard2] -> Expression2;
%% and so on …
_ -> Expression3
end.
try catch
try FunctionOrExpressions of
Pattern1 [when Guard1] -> Expression1;
Pattern2 [when Guard2] -> Expression2
%% and so on …
catch
ExType:ExPattern1 [when ExGuard1] ->
ExExpression1;
ExType:ExPattern2 [when ExGuard2] ->
ExExpression2;
%% and so on …
_:_ -> DefaultExExpression % _:_ 匹配所有异常
after
AfterExpressions
end
消息传递匹配
loop() ->
receive
{From, {rectangle, Width, Height}} ->
From ! {self(), Width * Height},
loop();
{From, {circle, R}} ->
From ! {self(), 3.14 * R * R},
loop();
{From, _Other} ->
From ! {self(), {error, unknown_shape}}
loop()
end.
Pid=spawn(fun loop/0).
Pid ! {self(), {rectangle, 10, 5}}. % {Pid, 50}
Pid ! {self(), {circle, 4}}. % {Pid, 50.24}
Pid ! {self(), {square, 10}}. % {Pid, {error, unknown_shape}}