Erlang中的匹配模式总结

2023-12-05 0 651

一、赋值时匹配

原子匹配
复制代码 代码如下:
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

记录匹配
复制代码 代码如下:
%% record(post, {title, slug, body, author}).

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}}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Erlang Erlang中的匹配模式总结 https://www.u-9.cn/jiaoben/erlang/101925.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务