分享好友 编程语言首页 频道列表

Erlang中的匹配模式总结

Erlang  2015-06-30 10:200

一、赋值时匹配

原子匹配

复制代码 代码如下:

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】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Erlang和Ruby的Socket通讯
server.erl Java代码 -module(server).  -export([start/0,start/1,process/1]).  -define(defPort, 8888).    start() - start(?defPort).    start(Port) -    case gen_tcp:listen(Port, [binary, {packet, 0}, {active, fals

0评论2023-02-09782

github上的Lua in Erlang
https://github.com/rvirding/luerl

0评论2023-02-08449

Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
如果要比较两个数,如果两个数之间是不同的类型,比如float和int那么,==操作会首先把两个数字转换成相同的相同类型

0评论2015-11-0948

php实现与erlang的二进制通讯实例解析
这篇文章主要介绍了php实现与erlang的二进制通讯实例解析,需要的朋友可以参考下

0评论2015-09-1795

Erlang并发编程介绍
这篇文章主要介绍了Erlang并发编程介绍,本文讲解了进程的创建 、进程间通信、超时设置以及给出代码实例,需要的朋友可以参考下

0评论2015-06-30142

ErlangIO编程之文件目录操作常用方法小结
这篇文章主要介绍了Erlang IO编程之文件目录操作常用方法小结,本文讲解了常用的文件操作如打开文件、读取文件、写入文件、删除文件等,需要的朋友可以参考下

0评论2015-06-3062

Erlang语法学习笔记:变量、原子、元组、列表、字符串
这篇文章主要介绍了Erlang语法学习笔记:变量、原子、元组、列表、字符串,本文简明总结了这5种类型的相关知识,需要的朋友可以参考下

0评论2015-06-3071

Erlang中的函数与流程控制介绍
这篇文章主要介绍了Erlang中的函数与流程控制介绍,本文先是讲解了函数的一些知识,然后讲解了case语句和if语句及算术表达式等内容,需要的朋友可以参考下

0评论2015-06-30126

Erlang中3种生成随机数的方法
这篇文章主要介绍了Erlang中3种生成随机数的方法,它们分别是random:uniform()、erlang:now()、crypto:strong_rand_bytes(N),需要的朋友可以参考下

0评论2015-06-30111

Erlang中执行linux命令的两种方法
这篇文章主要介绍了Erlang中执行linux命令的两种方法,本文着重讲解了erlang:open_port的使用,需要的朋友可以参考下

0评论2015-06-30107

Erlang实现的百度云推送Android服务端实例
这篇文章主要介绍了Erlang实现的百度云推送Android服务端实例,本文先是讲解了实现步骤,然后给出实现代码,需要的朋友可以参考下

0评论2015-06-3040

Erlang的一些编程技巧分享
这篇文章主要介绍了Erlang的一些编程技巧分享,本文是是实际编程中的个人总结,需要的朋友可以参考下

0评论2015-06-3090

CentOS6.5源码安装Erlang教程
这篇文章主要介绍了CentOS 6.5源码安装Erlang教程,本文讲解了源码编译安装的过程和遇到的一些错误处理方法,需要的朋友可以参考下

0评论2015-06-30104

Erlang项目内存泄漏分析方法
这篇文章主要介绍了Erlang项目内存泄漏分析方法,本文讲解了分析方法、分析流程并找到问题原因和解决方法,需要的朋友可以参考下

0评论2015-06-30116

Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法
这篇文章主要介绍了Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法,需要的朋友可以参考下

0评论2015-06-3072

Erlang中的注册进程使用实例
这篇文章主要介绍了Erlang中的注册进程使用实例,本文给出正常进程通信实例和使用使用注册进程通信实例,需要的朋友可以参考下

0评论2015-06-30142

Erlang分布式节点中的注册进程使用实例
这篇文章主要介绍了Erlang分布式节点中的注册进程使用实例,本文直接给出实例代码,需要的朋友可以参考下

0评论2015-06-3055

Erlang中的映射组Map详细介绍
这篇文章主要介绍了Erlang中的映射组Map详细介绍,本文讲解了创建映射组、更新映射组、两种操作符的区别、映射的增加、删除、获取等内容,需要的朋友可以参考下

0评论2015-06-3074

Erlang初学:Erlang的一些特点和个人理解总结
这篇文章主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程、一切都是常量、轻量进程、进程端口映射及典型缺点等内容,需要的朋友可以参考下

0评论2015-06-3076

Erlang中的模块与模式匹配介绍
这篇文章主要介绍了Erlang中的模块与模式匹配介绍,本文分别对模块与模式匹配做了讲解,需要的朋友可以参考下

0评论2015-06-3063

更多推荐