`
argan
  • 浏览: 129635 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

erlang 中case语句的使用

阅读更多

在erlang中,至少有三种可互换的流程控制方式:函数声明上的pattern match,case语句,if语句

 

这里讲将case语句和函数声明上的pattern match的区别。

 

case语句的格式如下:

 

case conditional-expression of
  Pattern1 -> expression1, expression2, .. ;,
  Pattern2 -> expression1, expression2, .. ;
  ... ;
  Patternn -> expression1, expression2, ..
end
 

执行的过程是,将conditional-expression挨个和Pattern-n去做match,如果match上了,就执行相应的代码段,如果没有match,就尝试下一个Pattern,直到最后。

 

例如程序:

area (Shape) ->
    case Shape of 
        {circle,R} -> math:pi()*R*R;
        {square,Side} -> Side * Side;
        Other -> {error,unknown_shape,Other}
    end.

同样的功能,用函数声明上的pattern match来实现:

area2 ({circle,R}) ->
    math:pi()*R*R;

area2 ({square,Side}) ->
    Side * Side;

area2 (Other) ->
    {error,unknown_shape,Other}.

 哪一种更好呢?

 

没答案,如果有的话,就是看情况。

 

erlang中的case与函数声明上的pattern match的主要区别有:

*case用来匹配的表达式只能是一个,而函数可以若干个

*case可以用在程序中的任何地方,而函数只能在声明的地方

 

主要就这么两点区别,其他的几乎一样了。

 

另外,下面的代码好么?为什么?

convert(Day) ->
  case Day of
    monday    -> 1;
    tuesday ->2;
    wednesday ->3;
    thursday ->4;
    friday    ->5;
    saturday ->6;
    sunday    ->7;
    Other     -> {error,unknow_day}
  end.
 

 

 

分享到:
评论

相关推荐

    erlang中文基础教程

    3. **模式匹配**:Erlang的函数调用和case语句都支持模式匹配,方便数据处理。 4. **函数**:Erlang的函数定义使用`fun`关键字,函数体可以是匿名的(lambda表达式)或有名字的。 5. **过程**:Erlang的进程是并发...

    Erlang中文手册.pdf

    - **1.2.11 If和Case**:解释条件语句的使用。 - **1.2.12 内建函数(BIFs)**:Erlang提供了一些内置函数,可以在无需加载任何模块的情况下直接使用。 - **1.2.13 复杂函数**:介绍如何创建更复杂的函数和模块。 ###...

    erlang_版本24.3.4.4

    - **Pattern Matching**:Erlang的匹配操作符`=`允许在函数调用、case语句和receive语句中进行模式匹配。 熟悉这些概念和Erlang的编程范式后,你就可以开始构建高效、容错的并发应用程序了。无论是网络服务器、实时...

    erlang资源

    1. **Erlang语法**:涵盖基本的变量、数据类型(如原子、列表、元组和二进制)、控制结构(如case表达式和if语句)以及函数定义。 2. **函数式编程概念**:Erlang是纯函数式语言,书中可能会介绍函数式编程的基本...

    Erlang中文手册

    - **模式匹配**: 在 `receive` 语句中使用模式匹配来处理接收到的消息。 - **进程名称注册**: - **注册**: 使用 `register(Name, PID)` 注册一个进程名。 - **查找**: 使用 `whereis(Name)` 查找已注册的进程。 ...

    Erlang资料大全

    掌握如何声明变量、使用case语句和if表达式进行条件判断,以及如何定义和调用函数是入门阶段的重点。 “入门代码code”部分则可能包含了一些示例程序,让学习者通过实际编码来巩固理论知识。可能涵盖简单的进程通信...

    erlang 程序设计 源码

    4. **模式匹配**:Erlang的模式匹配允许在函数调用中解构复杂的数据结构,方便地提取所需信息,同时也用于case语句和收到的消息匹配。 5. **BEAM虚拟机**:Erlang运行在BEAM虚拟机上,BEAM提供了高效的内存管理、...

    Erlang编程中文学习手册.pdf

    Erlang Shell中输入的最后一个字符通常是英文句号,表示语句的结束。如果输入有误,可以使用退格键进行删除。通过输入`halt()`也可以退出Erlang Shell。 接着,手册介绍了Erlang中的模块(Modules)和函数...

    erlang简介

    3. **模式匹配**:Erlang中的模式匹配是其语法的一个重要特性,允许在函数调用和case语句中进行数据结构的解构和比较,提高了代码的可读性和简洁性。 4. **变量单次赋值**:Erlang采用不可变数据类型,变量一旦赋值...

    Erlang程序设计及源代码打包

    3. **模式匹配**:Erlang的模式匹配机制使得数据结构的解构和操作变得直观,它在函数调用、case语句等地方广泛应用。 4. **错误处理**:Erlang采用"失败早,失败快"的原则,错误通常会导致进程崩溃,但系统可以自动...

    [Erlang程序设计]源代码

    例如,`case`表达式和`match`操作符的使用,体现了Erlang的这一独特功能。 **四、错误处理与容错** Erlang的哲学是“让错误快速失败”,通过这种方式,系统可以迅速恢复并保持稳定。源代码中的错误处理通常涉及到`...

    erlang深度分析

    4. **模式匹配**:Erlang的模式匹配功能在函数调用和case语句中广泛应用,使得代码更简洁,更易于理解。 5. **并发编程**:Erlang的并发模型基于actor模型,每个actor(进程)独立执行任务,通过消息传递进行通信,...

    Erlang 程序设计 中文 + 英文 pdf

    Erlang的模式匹配不仅在函数调用中发挥作用,还在解构记录、case语句和guards中使用,这是一种强大的编程工具,可以帮助程序员编写更简洁、清晰的代码。 **热更新** Erlang系统支持代码的热更新,无需停止服务,就...

    erlang api 最新资源

    通过模式匹配,函数可以根据参数的结构和内容来选择不同的执行路径,而不需要使用传统的if-else或switch-case条件语句。例如,在Erlang中,我们可以定义一个模式匹配函数来确定水果的价格,根据传入的水果类型返回...

    Erlang Reference Manual

    手册中详细解释了术语的概念以及如何在程序中使用它们。 **1.2.2 数字(Number)** Erlang 支持多种类型的数值表示,如整数、浮点数等。文档中详细介绍了不同类型的数值表示方法及运算规则。 **1.2.3 原子(Atom)** ...

    erlang的翻译文档

    - **条件语句**:讲解了`if`和`case`语句的使用。 - **内置函数**:介绍了Erlang的一些内置函数(BIFs)。 - **复杂函数**:通过示例说明如何编写复杂的函数。 - **并行编程**:重点介绍了Erlang的并发模型。 -...

    Thinking in Erlang

    **条件语句与模式匹配**:`if` 和 `case` 语句是Erlang中常用的控制结构。它们不仅支持传统的条件判断,还可以利用模式匹配来做出更复杂的决策。 **守卫(Guards)**:守卫是在模式匹配的基础上增加的额外条件检查...

    erlang学习笔记

    通过`erlang:system_info(process_count)`和`erlang:memory()`函数,可以分别获取系统中的进程数量和总内存使用情况。 #### 5. 进程间通信与网络连接 在Erlang中,进程间通信主要通过发送和接收消息来实现。消息的...

Global site tag (gtag.js) - Google Analytics