- 浏览: 38904 次
- 来自: 深圳
文章分类
最新评论
-
ZacMa:
哈哈,突然感觉里面没怎么介绍,全是贴代码了
<8>redis及erl-redis阅读 -
惊涛翻案:
马博士,给我开课吧
<8>redis及erl-redis阅读
erlang是一种动态类型的语言(运行时才决定数据类型),可以自己声明一些数据类型
(1) 预定义类型
首先erlang自己有一套预定义的数据类型, 也可以有用户自己定义的类型,自己定义的类型都来源于这些预定义的类型的组合及类型定义的语法,
预定义类型:
Type :: any() %% The top type, the set of all Erlang terms.
| none() %% The bottom type, contains no terms.
| pid()
| port()
| reference()
| [] %% nil
| Atom
| Binary
| float()
| Fun
| Integer
| List
| Tuple
| Union
| UserDefined %% described in Section 2
Union :: Type1 | Type2
Atom :: atom()
| Erlang_Atom %% 'foo', 'bar', ...
Binary :: binary() %% <<_:_ * 8>>
| <<>>
| <<_:Erlang_Integer>> %% Base size
| <<_:_*Erlang_Integer>> %% Unit size
| <<_:Erlang_Integer, _:_*Erlang_Integer>>
Fun :: fun() %% any function
| fun((...) -> Type) %% any arity, returning Type
| fun(() -> Type)
| fun((TList) -> Type)
Integer :: integer()
| Erlang_Integer %% ..., -1, 0, 1, ... 42 ...
| Erlang_Integer..Erlang_Integer %% specifies an integer range
List :: list(Type) %% Proper list ([]-terminated)
| improper_list(Type1, Type2) %% Type1=contents, Type2=termination
| maybe_improper_list(Type1, Type2) %% Type1 and Type2 as above
Tuple :: tuple() %% stands for a tuple of any size
| {}
| {TList}
TList :: Type
| Type, TList
(2) 内置的一些类型:
一些联合类型的,是erlang系统已经定义好的,可以认为是自定义的, 当然erlang已经有的类型名字,我们自己不可以再次使用,编译时候会对这些类型进行检查:
Built-in type Stands for
term() any()
boolean() 'false' | 'true'
byte() 0..255
char() 0..16#10ffff
non_neg_integer() 0..
pos_integer() 1..
neg_integer() ..-1
number() integer() | float()
list() [any()]
maybe_improper_list() maybe_improper_list(any(), any())
maybe_improper_list(T) maybe_improper_list(T, any())
string() [char()]
nonempty_string() [char(),...]
iolist() maybe_improper_list(char() | binary() | iolist(), binary() | [])
module() atom()
mfa() {atom(),atom(),byte()}
node() atom()
timeout() 'infinity' | non_neg_integer()
no_return() none()
(3)用户自定义类型:
自己定义的类,必须引用已经有的预定义类型,或者已经定义过的类型,或者其他模块导出的类型,自定义类型的模板:-type my_struct_type() :: Type.
例如自己定一个int型,
-type int() :: integer().
这里integer() 必须是已经有的类型
(4)应用:
程序中的函数说明的通常用法,用这种方法更通用,结构固定,容易理解,
格式如下: -spec Module:Function(ArgType1, ..., ArgTypeN) -> ReturnType.
例如自己定义一个int(), 并且给test/1函数进行说明:
-module(test).
-compile(export_all).
-type int() :: integer().
<1> -spec test:test(integer()) -> integer().
<2> -spec test:test(A) -> A when
A::integer().
<3> -spec test:test(int()) -> int().
test(A) when is_integer(A) ->
A.
这三种方法都可以,方法<3>用了自己定义的类型int().
(1) 预定义类型
首先erlang自己有一套预定义的数据类型, 也可以有用户自己定义的类型,自己定义的类型都来源于这些预定义的类型的组合及类型定义的语法,
预定义类型:
Type :: any() %% The top type, the set of all Erlang terms.
| none() %% The bottom type, contains no terms.
| pid()
| port()
| reference()
| [] %% nil
| Atom
| Binary
| float()
| Fun
| Integer
| List
| Tuple
| Union
| UserDefined %% described in Section 2
Union :: Type1 | Type2
Atom :: atom()
| Erlang_Atom %% 'foo', 'bar', ...
Binary :: binary() %% <<_:_ * 8>>
| <<>>
| <<_:Erlang_Integer>> %% Base size
| <<_:_*Erlang_Integer>> %% Unit size
| <<_:Erlang_Integer, _:_*Erlang_Integer>>
Fun :: fun() %% any function
| fun((...) -> Type) %% any arity, returning Type
| fun(() -> Type)
| fun((TList) -> Type)
Integer :: integer()
| Erlang_Integer %% ..., -1, 0, 1, ... 42 ...
| Erlang_Integer..Erlang_Integer %% specifies an integer range
List :: list(Type) %% Proper list ([]-terminated)
| improper_list(Type1, Type2) %% Type1=contents, Type2=termination
| maybe_improper_list(Type1, Type2) %% Type1 and Type2 as above
Tuple :: tuple() %% stands for a tuple of any size
| {}
| {TList}
TList :: Type
| Type, TList
(2) 内置的一些类型:
一些联合类型的,是erlang系统已经定义好的,可以认为是自定义的, 当然erlang已经有的类型名字,我们自己不可以再次使用,编译时候会对这些类型进行检查:
Built-in type Stands for
term() any()
boolean() 'false' | 'true'
byte() 0..255
char() 0..16#10ffff
non_neg_integer() 0..
pos_integer() 1..
neg_integer() ..-1
number() integer() | float()
list() [any()]
maybe_improper_list() maybe_improper_list(any(), any())
maybe_improper_list(T) maybe_improper_list(T, any())
string() [char()]
nonempty_string() [char(),...]
iolist() maybe_improper_list(char() | binary() | iolist(), binary() | [])
module() atom()
mfa() {atom(),atom(),byte()}
node() atom()
timeout() 'infinity' | non_neg_integer()
no_return() none()
(3)用户自定义类型:
自己定义的类,必须引用已经有的预定义类型,或者已经定义过的类型,或者其他模块导出的类型,自定义类型的模板:-type my_struct_type() :: Type.
例如自己定一个int型,
-type int() :: integer().
这里integer() 必须是已经有的类型
(4)应用:
程序中的函数说明的通常用法,用这种方法更通用,结构固定,容易理解,
格式如下: -spec Module:Function(ArgType1, ..., ArgTypeN) -> ReturnType.
例如自己定义一个int(), 并且给test/1函数进行说明:
-module(test).
-compile(export_all).
-type int() :: integer().
<1> -spec test:test(integer()) -> integer().
<2> -spec test:test(A) -> A when
A::integer().
<3> -spec test:test(int()) -> int().
test(A) when is_integer(A) ->
A.
这三种方法都可以,方法<3>用了自己定义的类型int().
发表评论
-
erlang版本安装相关问题 <32>
2014-05-10 15:54 623<1> erlang R1603安装后,crytp ... -
关于iolist<30>
2014-01-15 10:42 624iolist是比较常用的数据结构. iolist的 ... -
erlang 字符编码 <29>
2014-01-14 16:31 1260用mochiweb通过网页发送中文到服务器,结果服务器显示乱码 ... -
<27>erlang record
2013-11-19 11:19 774平时总是忘记record的某些使用方法,每次使用都要翻文档, ... -
<26>io:format io_lib:format
2013-11-14 11:07 1313使用io_lib时候要注意参数,尤其是封装json串的时候,否 ... -
<24>用error_logger间隔记录日志
2013-10-22 16:09 650执行下面的代码 test:start(). test.erl ... -
<23>erlang 数据存储
2013-10-15 22:15 1660做为后端开发者,经常 ... -
<22> erlang中的数学计算函数相关
2013-10-10 10:34 16321. 幂函数 match:pow(m,n) 表示m的n次幂 ... -
<19>erlang中的时间,日期
2013-09-06 11:21 1194时间函数涉及的数据类型: DATA TYPES datetim ... -
<18>Efficient guide 之List handling
2013-08-31 18:45 6771 Deep and flat lists lists:fl ... -
<17>Efficiency Guide之Function
2013-08-27 22:30 5801. 函数模式匹配 模式匹配,在函数头,case和receiv ... -
<16>Efficiency Guide之Common Caveats
2013-08-11 11:07 809(1) ++ 如果做一个list的反转,不要这样, naiv ... -
<15> lists模块补充
2013-08-05 20:12 828%% 对list模块经常用到的进行补充 %% 1 对所有元素进 ... -
<15> lists模块解析和补充
2013-07-24 17:57 12%% 对list模块经常用到的进行补充 %% 1 对所有元素 ... -
<12>简述erlang的几种错误
2013-04-14 23:31 11821) badarg Bad argument. The ar ... -
<11>erlang中方便使用的模块和命令(2)
2013-04-06 22:33 797(1) 进程字典到底用不用,很多人推荐使用 http:// ... -
<9>rabbitmq网络层
2013-01-31 00:20 792抽离出了网络层, 逻辑层待以后研究 https://gith ... -
<8>redis及erl-redis阅读
2013-01-16 10:14 8491 redis的功能相当的强大,里面的发布订阅pub/su ... -
<7>pg2 分析
2012-12-08 13:42 1258网上看到erlang的pg2模块似乎没人推荐使用,但是还是有不 ... -
<6>error_logger 使用
2012-12-02 16:24 1451erlang中日志管理主要有error_loggger 模块, ...
相关推荐
- **1.2.2 模块和函数**:Erlang代码被组织在模块中,每个模块可以包含许多函数。 - **1.2.3 元子(Atoms)**:Atoms是带有文字名称的常量。 - **1.2.4 元组**:元组是由不同数据类型组成的集合。 - **1.2.5 列表**:...
- **库函数参考**:详述Erlang标准库和OTP库中的各种模块和函数。 - **系统架构**:描述Erlang系统是如何组织和运行的。 - **错误处理和调试**:指导如何定位和修复问题。 **4. Lib** `lib`目录通常包含各种 OTP 库...
它可能包含了DSL的语法规则、示例和如何在Erlang程序中调用和解析DSL的说明。 3. `biz_rules.txt` - 业务规则文件,很可能包含了使用DSL编写的业务逻辑。这些规则可能是用DSL语法书写的,可以被Erlang程序动态解析和...
以上是Erlang速查表中提到的关键知识点的详细说明,涵盖了变量、字符串、列表、元组、函数、宏、Erlang Shell、记录、列表操作、模块属性、表达式、模式匹配以及编译选项等概念。通过这些知识点,我们可以看到Erlang...
- **用户手册**: 包含了对各个模块和函数的详细说明,是学习Erlang的重要资源。 **1.2.7 将输出写到终端上** - **函数**: 使用 `io:format/2` 或 `io:fwrite/2` 将文本输出到屏幕。 - 示例:`io:format("Hello, ...
- **模块和函数**:解释了Erlang中模块的概念以及如何定义和调用函数。 - **元子(Atoms)**:讨论了Erlang中的一种基本数据类型——原子。 - **元组**:讲解了元组这种数据结构及其使用方法。 - **列表**:探讨...
学习这个资料包,你将深入理解Erlang OTP平台如何支撑RabbitMQ这样的高性能消息代理,并掌握如何在JavaEE环境中集成和使用RabbitMQ,以提高应用的扩展性和可靠性。同时,你还可以了解到特定版本之间的差异,这对于...
本文档旨在介绍《使用Erlang进行程序开发——编程规则与约定》中的一些关键点,帮助读者更好地理解和应用这些规范。文档不仅涵盖了Erlang的基本概念和术语,还介绍了模块化设计原则、函数编写规范以及过程通信机制等...
- **头文件** 是 Erlang 模块之间的接口文件,用于声明模块中的公共接口和类型定义。 ##### 6.4 记录 - **记录** 的详细使用方法,包括如何定义记录类型以及如何在程序中使用记录。 ##### 6.5 宏 - **宏** 的...
### Erlang分布式调用与TableServer支持详解 #### 前言 Erlang作为一种专为构建高并发、高可用性系统而设计的编程语言...希望本篇文档能够帮助大家更好地理解和掌握Erlang的分布式处理机制,并将其应用于实际项目中。
Interop - 将 Rust 值解码和编码为 Erlang 术语就像函数调用一样简单。类型组合 - 可以使用单个属性使 Rust 结构可编码和可解码为 Erlang 或 Elixir。资源对象 - 使您能够安全地将 Rust 结构的引用传递到 Erlang ...
标题中的“pickle:Erlang 库,用于在 Python 泡菜和 Erlang 术语之间进行转换”揭示了一个关键的信息:存在一个库,它允许在 Python 的 pickle 格式与 Erlang 的数据结构之间进行互操作。pickle 是 Python 中用于...
OTP提供了一组标准库,如进程间通信(IPC)、错误处理和容错机制等,这些在Erlang/OTP系统文档中都有详尽的说明。 在Erlang中,废弃功能的公告是为了确保代码的持续更新和优化,保持语言的活力和适应性。因此,对于...
Erlang是一种静态类型、函数式编程语言,由爱立信在1986年开发,用于构建高可用性、容错性和可扩展性的系统。OTP则是一套库和设计原则,它包括一系列预先编写好的模块,如进程间通信、分布式计算、错误处理和监控等...
Erlang是一种动态类型的函数式编程语言,最初由爱立信开发,特别适合处理并发和实时系统。 Erlang OTP是一个开源框架,它提供了一个强大的平台来构建高可用性、高性能的应用程序。在OTP中," OTP库 "包括各种预定义...
1. Erlang 语言:OTP是基于Erlang语言构建的,Erlang是一种面向并发、动态类型、函数式编程语言,特别适合于构建大规模并发系统和高可用性服务。它的特性包括轻量级进程、消息传递、热代码升级等。 2. OTP 库:OTP ...
在函数式编程中,函数是程序的基本构建块,它们可以接受输入并返回输出,同时避免改变状态和可变数据。Elixir作为一门现代函数式编程语言,充分利用了函数式编程的优势,并且设计为高效、可扩展和易于维护。 #### ...