当前位置: 首页 > 编程笔记 >

Erlang中的匹配模式总结

欧阳正谊
2023-03-14
本文向大家介绍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中的模块与模式匹配介绍,包括了Erlang中的模块与模式匹配介绍的使用技巧和注意事项,需要的朋友参考一下 模块是Erlang的基本代码单元,erl文件编译后以.beam作为扩展名,采用UTF8字符集,.erl文件示意如下: -module(模块名,与存放模块的文件名相同) -export([方法名/输入参数的个数]) 模块属性有两种类型:预定义型和用户定义型。   Erl

  • 一、模式匹配 Scala 支持模式匹配机制,可以代替 swith 语句、执行类型检查、以及支持析构表达式等。 1.1 更好的swith Scala 不支持 swith,可以使用模式匹配 match...case 语法代替。但是 match 语句与 Java 中的 switch 有以下三点不同: Scala 中的 case 语句支持任何类型;而 Java 中 case 语句仅支持整型、枚举和字符串常

  • 主机权限和 内容脚本匹配 是基于匹配模式定义的一组 URL。匹配模式本质上是一个以允许的 schema(http,https,file 或ftp 开头)的URL,并且可以包含 “*” 字符。特殊模式 < all_urls > 匹配以允许的 schema 开头的任何 URL。 每个模式包含 3 个部分: schema - 例如,http 或file 或 * 注意:对文件 URL 的访问不是自动的。用

  • MySQL提供了一个标准的SQL模式匹配,和基于扩展的正则表达式的模式匹配Unix工具(如vi,grep,sed)一样。 SQL模式匹配可以使用“_“来匹配任意单个字符,”%“可以用来匹配任意数量(包含0个字符)的字符。在MySQL中,SQL模式匹配的大小写默认是不敏感的,以下有一些例子,当你在使用SQL模式时,不要使用 = 或 <>,而是使用LIKE 或 NOT LIKE。 要找到以字符“b"开

  • 除了我们常见的控制语句之外,Rust还提供了一个更加强大的关键字——match 。但是,需要指出的一点是,match只是匹配,要发挥其全部威力,还需要模式的配合。本章,我们就将的对Rust的模式匹配进行一番探索。 本章内容: match关键字 模式 pattern

  • 模式匹配 内容脚本可以作用到模式匹配定义好的URL集合上. 你能对manifest文件的内容脚本段的部分进行一个或多个模式匹配操作. 这里描述模式匹配语法 — 当你指定内容脚本将影响哪些URL时你需要遵循的规则. 任意一个模式匹配本质上都是一个以认可的协议(例如:http, https, file, ftp 或者 chrome-extension)开头的URL,只是URL你可以包含"*"字符. 这