在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.
分享到:
相关推荐
3. **模式匹配**:Erlang的函数调用和case语句都支持模式匹配,方便数据处理。 4. **函数**:Erlang的函数定义使用`fun`关键字,函数体可以是匿名的(lambda表达式)或有名字的。 5. **过程**:Erlang的进程是并发...
- **1.2.11 If和Case**:解释条件语句的使用。 - **1.2.12 内建函数(BIFs)**:Erlang提供了一些内置函数,可以在无需加载任何模块的情况下直接使用。 - **1.2.13 复杂函数**:介绍如何创建更复杂的函数和模块。 ###...
- **Pattern Matching**:Erlang的匹配操作符`=`允许在函数调用、case语句和receive语句中进行模式匹配。 熟悉这些概念和Erlang的编程范式后,你就可以开始构建高效、容错的并发应用程序了。无论是网络服务器、实时...
1. **Erlang语法**:涵盖基本的变量、数据类型(如原子、列表、元组和二进制)、控制结构(如case表达式和if语句)以及函数定义。 2. **函数式编程概念**:Erlang是纯函数式语言,书中可能会介绍函数式编程的基本...
- **模式匹配**: 在 `receive` 语句中使用模式匹配来处理接收到的消息。 - **进程名称注册**: - **注册**: 使用 `register(Name, PID)` 注册一个进程名。 - **查找**: 使用 `whereis(Name)` 查找已注册的进程。 ...
掌握如何声明变量、使用case语句和if表达式进行条件判断,以及如何定义和调用函数是入门阶段的重点。 “入门代码code”部分则可能包含了一些示例程序,让学习者通过实际编码来巩固理论知识。可能涵盖简单的进程通信...
4. **模式匹配**:Erlang的模式匹配允许在函数调用中解构复杂的数据结构,方便地提取所需信息,同时也用于case语句和收到的消息匹配。 5. **BEAM虚拟机**:Erlang运行在BEAM虚拟机上,BEAM提供了高效的内存管理、...
Erlang Shell中输入的最后一个字符通常是英文句号,表示语句的结束。如果输入有误,可以使用退格键进行删除。通过输入`halt()`也可以退出Erlang Shell。 接着,手册介绍了Erlang中的模块(Modules)和函数...
3. **模式匹配**:Erlang中的模式匹配是其语法的一个重要特性,允许在函数调用和case语句中进行数据结构的解构和比较,提高了代码的可读性和简洁性。 4. **变量单次赋值**:Erlang采用不可变数据类型,变量一旦赋值...
3. **模式匹配**:Erlang的模式匹配机制使得数据结构的解构和操作变得直观,它在函数调用、case语句等地方广泛应用。 4. **错误处理**:Erlang采用"失败早,失败快"的原则,错误通常会导致进程崩溃,但系统可以自动...
例如,`case`表达式和`match`操作符的使用,体现了Erlang的这一独特功能。 **四、错误处理与容错** Erlang的哲学是“让错误快速失败”,通过这种方式,系统可以迅速恢复并保持稳定。源代码中的错误处理通常涉及到`...
4. **模式匹配**:Erlang的模式匹配功能在函数调用和case语句中广泛应用,使得代码更简洁,更易于理解。 5. **并发编程**:Erlang的并发模型基于actor模型,每个actor(进程)独立执行任务,通过消息传递进行通信,...
Erlang的模式匹配不仅在函数调用中发挥作用,还在解构记录、case语句和guards中使用,这是一种强大的编程工具,可以帮助程序员编写更简洁、清晰的代码。 **热更新** Erlang系统支持代码的热更新,无需停止服务,就...
通过模式匹配,函数可以根据参数的结构和内容来选择不同的执行路径,而不需要使用传统的if-else或switch-case条件语句。例如,在Erlang中,我们可以定义一个模式匹配函数来确定水果的价格,根据传入的水果类型返回...
手册中详细解释了术语的概念以及如何在程序中使用它们。 **1.2.2 数字(Number)** Erlang 支持多种类型的数值表示,如整数、浮点数等。文档中详细介绍了不同类型的数值表示方法及运算规则。 **1.2.3 原子(Atom)** ...
- **条件语句**:讲解了`if`和`case`语句的使用。 - **内置函数**:介绍了Erlang的一些内置函数(BIFs)。 - **复杂函数**:通过示例说明如何编写复杂的函数。 - **并行编程**:重点介绍了Erlang的并发模型。 -...
**条件语句与模式匹配**:`if` 和 `case` 语句是Erlang中常用的控制结构。它们不仅支持传统的条件判断,还可以利用模式匹配来做出更复杂的决策。 **守卫(Guards)**:守卫是在模式匹配的基础上增加的额外条件检查...
通过`erlang:system_info(process_count)`和`erlang:memory()`函数,可以分别获取系统中的进程数量和总内存使用情况。 #### 5. 进程间通信与网络连接 在Erlang中,进程间通信主要通过发送和接收消息来实现。消息的...