华域联盟 Erlang Erlang中的匹配模式总结

Erlang中的匹配模式总结

一、赋值时匹配

原子匹配

复制代码 代码如下:

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

本文由 华域联盟 原创撰写:华域联盟 » Erlang中的匹配模式总结

转载请保留出处和原文链接:https://www.cnhackhy.com/84659.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

上一篇

已经没有了

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部