前面一篇high level地介绍了Erlang语言在并发编程上的特点。本文详细介绍Erlang的基本语法:
在Erlang语法中,跟java或c有相当大的差异,跟以往我学过的任何语言(c,pasacal,vb,delphi,php,groovy,python)有巨大的不同,前面的语言要么是基于过程的,或者基于面向对象的,而Erlang是面向消息的或者说是基于函数的。
在语法要素方面,变量有两种状态,要么绑定(已赋值),要么未绑定,一旦被赋值,就不能再赋值,任何变量都可以看成是不可变的,有点像java中的final变量。
变量类型:
1.整型, 比如 1,2,3
2.浮点型, 比如 1.0,3.0e12
3.字符串,严格意义讲是整型变量的list。"abc" 和 [97,98,99]一样
4.原子(atoms),就像字面量,由小写字母开头的字符组成,也可以用单引号扩住,以便于定义以大写字母开头的字符列表,有点像java中枚举类型,c中的常量,他们是全局有效的,比如abc, color,name,red等等
5.元组(tuple),像c的struct,像java的纯值对象,像js对象(或者json对象),他是由基本的整型,浮点型,原子,项,及元组和列表等类型组成的附和类型。不要和python中的tuple混淆,他们之间完全不一样。
6.列表(List),就像java中LinkedList或python中的list,大小可变的,列表由两部分组成头和尾,[H|T],H是列表头,T代表列表尾,列表尾要求是一个列表。列表的定义是用[]形式表示。
7.引用(reference),和java,C++及大多数面向对象语言中的引用是一样的,比如,X={1,3},Y=X,X和Y都是只向相同的数据,变没有拷贝一份出来。
8. 匿名变量,匿名变量用“_”表示,主要用在赋值中剔除想用的值,比如 {x,_,Y}={1,3,5},可以只取元组中的第一个值和第3个值并赋值给x,y
我们可以看出来,上面这些类型都是跟数据相关的,我们的消息都应该由这些数据类型组成。
9.二进制(binarry),一个二进制数是一个字节序列。二进制数为二进制数据的存贮提供了一种高空间效率的方法
10.pid,我们知道,Erlang语言的特点是要基于进程的,进程之间的通信是基于消息的,要发消息必须知道对方的进程id
11.端口(port),端口用于与外界通信,由内置函数(BIF3)open_port来创建。消息可以通过端口进行收发,但是这些消息必须遵守所谓“端口协议” (port protocol)的规则
12. 匿名函数(fun)——匿名函数是函数闭包4,由表达式“fun(…) -> … end.”来创建
变量赋值(模式匹配 Pattern Matching):
严格意义或者官方资料上,没有赋值的说法,只是模式匹配的提法很容易与正则表达式容易混在一起,而实际上用赋值的方式理解这种模式匹配还是容易理解的。比如{X,Y}={1,3},变量X被赋值为1,Y被赋值为3,但是,如果X或者Y任何一个变量已经赋过值都会抛错。
模式匹配涉及两个概念:Pattern 和 Term
pattern可以看成是各种类型变量,而Term可以看成是一个都已经赋值过的变量或常量组成,进行模式匹配相当于python中的元组赋值。
以下是模式匹配的例子:
Pattern Term Result
{X,abc} {123,abc} 成功 X → 123
{X,Y,Z} {222,def,"cat"} 成功 X → 222, Y → def,Z → "cat"
{X,Y} {333,ghi,"cat"} 失败—the tuples have different shapes
X true 成功 X → true
{X,Y,X} {{abc,12},42,{abc,12}} 成功 X → {abc,12}, Y → 42
{X,Y,X} {{abc,12},42,true} 失败—X cannot be both {abc,12} and true
[H|T] [1,2,3,4,5] 成功 H → 1, T → [2,3,4,5]
[H|T] "cat" 成功 H → 99, T → "at"
[A,B,C|T] [a,b,c,d,e,f] 成功 A → a, B → b,C → c, T → [d,e,f]
分享到:
相关推荐
这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。 这是一本讲解Erlang编程语言的入门指南,内容通俗易懂...
本书除了全面介绍Erlang语言和OTP平台的基础知识外,还通过一系列实用案例引领你深入了解OTP的高级特性,一步步构建一个大型生产系统,并加以优化和完善。三位作者在Erlang领域拥有极其丰富的实战经验,细致入微地...
Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使 用它来开发电话和通信应用程序。 本教程目的是告诉你如何快速高效地学习 Erlang 语言。教程中只讲述了 ...
erlang-21.3-1.el7.x86_64.rpm rabbitmq基础语言环境。
erlang-22.1.4-1.el7.x86_64.rpm rabbitmq基础语言环境。
erlang-21.3.7.1-1.el7.x86_64.rpm rabbitmq基础语言环境。
书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...
书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...
本书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发...
本书是为那些具有命令式语言编程基础知识(例如C / C ++,Java,Python,Ruby等)并且可能会或可能不知道函数式编程(例如Haskell,Scala,Erlang)的人们学习Erlang的一种方法。 ,Clojure,OCaml等)。
《Erlang程序设计》是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。《Erlang程序设计》将帮助读者在消息...
rabbitmq安装基础语言erlang适配版本rabbitmq-server-3.7.3-1.el6
书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...
erlang-20.3.8.22-1.el7.x86_64.rpm rabbitmq基础语言环境。
该Dockerfile提供了一个很好的基础构建映像,可用于Erlang应用程序的多阶段构建。 它带有Alpine,Erlang和Rebar的最新版本。 它旨在与应用程序一起使用或为您的应用程序创建发布映像,并允许您避免交叉编译发布。 ...