`
ZacMa
  • 浏览: 38918 次
  • 来自: 深圳
社区版块
存档分类
最新评论

<20>erlang中的类型和函数说明

 
阅读更多
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().                       


分享到:
评论

相关推荐

    Erlang中文手册.pdf

    - **1.2.2 模块和函数**:Erlang代码被组织在模块中,每个模块可以包含许多函数。 - **1.2.3 元子(Atoms)**:Atoms是带有文字名称的常量。 - **1.2.4 元组**:元组是由不同数据类型组成的集合。 - **1.2.5 列表**:...

    erlang otp 19.1 官网文档 HTML格式

    - **库函数参考**:详述Erlang标准库和OTP库中的各种模块和函数。 - **系统架构**:描述Erlang系统是如何组织和运行的。 - **错误处理和调试**:指导如何定位和修复问题。 **4. Lib** `lib`目录通常包含各种 OTP 库...

    使用erlang的动态执行编写DSL

    它可能包含了DSL的语法规则、示例和如何在Erlang程序中调用和解析DSL的说明。 3. `biz_rules.txt` - 业务规则文件,很可能包含了使用DSL编写的业务逻辑。这些规则可能是用DSL语法书写的,可以被Erlang程序动态解析和...

    Erlang 速查表 v1.0.pdf

    以上是Erlang速查表中提到的关键知识点的详细说明,涵盖了变量、字符串、列表、元组、函数、宏、Erlang Shell、记录、列表操作、模块属性、表达式、模式匹配以及编译选项等概念。通过这些知识点,我们可以看到Erlang...

    Erlang中文手册

    - **用户手册**: 包含了对各个模块和函数的详细说明,是学习Erlang的重要资源。 **1.2.7 将输出写到终端上** - **函数**: 使用 `io:format/2` 或 `io:fwrite/2` 将文本输出到屏幕。 - 示例:`io:format("Hello, ...

    erlang的翻译文档

    - **模块和函数**:解释了Erlang中模块的概念以及如何定义和调用函数。 - **元子(Atoms)**:讨论了Erlang中的一种基本数据类型——原子。 - **元组**:讲解了元组这种数据结构及其使用方法。 - **列表**:探讨...

    (学成在线day05 RabbitMQ资料)Erlang/OTP20.3版本和RabbitMQ3.7.3

    学习这个资料包,你将深入理解Erlang OTP平台如何支撑RabbitMQ这样的高性能消息代理,并掌握如何在JavaEE环境中集成和使用RabbitMQ,以提高应用的扩展性和可靠性。同时,你还可以了解到特定版本之间的差异,这对于...

    erlang 编程规范

    本文档旨在介绍《使用Erlang进行程序开发——编程规则与约定》中的一些关键点,帮助读者更好地理解和应用这些规范。文档不仅涵盖了Erlang的基本概念和术语,还介绍了模块化设计原则、函数编写规范以及过程通信机制等...

    getting_started_erlang-5.4.pdf

    - **头文件** 是 Erlang 模块之间的接口文件,用于声明模块中的公共接口和类型定义。 ##### 6.4 记录 - **记录** 的详细使用方法,包括如何定义记录类型以及如何在程序中使用记录。 ##### 6.5 宏 - **宏** 的...

    erlang学习4.pdf

    ### Erlang分布式调用与TableServer支持详解 #### 前言 Erlang作为一种专为构建高并发、高可用性系统而设计的编程语言...希望本篇文档能够帮助大家更好地理解和掌握Erlang的分布式处理机制,并将其应用于实际项目中。

    用于创建 Erlang NIF 函数的安全 Rust 桥

    Interop - 将 Rust 值解码和编码为 Erlang 术语就像函数调用一样简单。类型组合 - 可以使用单个属性使 Rust 结构可编码和可解码为 Erlang 或 Elixir。资源对象 - 使您能够安全地将 Rust 结构的引用传递到 Erlang ...

    pickle:Erlang 库,用于在 Python 泡菜和 Erlang 术语之间进行转换

    标题中的“pickle:Erlang 库,用于在 Python 泡菜和 Erlang 术语之间进行转换”揭示了一个关键的信息:存在一个库,它允许在 Python 的 pickle 格式与 Erlang 的数据结构之间进行互操作。pickle 是 Python 中用于...

    otp-system-documentation.pdf

    OTP提供了一组标准库,如进程间通信(IPC)、错误处理和容错机制等,这些在Erlang/OTP系统文档中都有详尽的说明。 在Erlang中,废弃功能的公告是为了确保代码的持续更新和优化,保持语言的活力和适应性。因此,对于...

    otp_win64_20.3

    Erlang是一种静态类型、函数式编程语言,由爱立信在1986年开发,用于构建高可用性、容错性和可扩展性的系统。OTP则是一套库和设计原则,它包括一系列预先编写好的模块,如进程间通信、分布式计算、错误处理和监控等...

    otp-win64-25.0.zip

    Erlang是一种动态类型的函数式编程语言,最初由爱立信开发,特别适合处理并发和实时系统。 Erlang OTP是一个开源框架,它提供了一个强大的平台来构建高可用性、高性能的应用程序。在OTP中," OTP库 "包括各种预定义...

    otp_win64_21banben

    1. Erlang 语言:OTP是基于Erlang语言构建的,Erlang是一种面向并发、动态类型、函数式编程语言,特别适合于构建大规模并发系统和高可用性服务。它的特性包括轻量级进程、消息传递、热代码升级等。 2. OTP 库:OTP ...

    Learn Functional Programming with Elixir New Foundations for a New 无水印转化版pdf

    在函数式编程中,函数是程序的基本构建块,它们可以接受输入并返回输出,同时避免改变状态和可变数据。Elixir作为一门现代函数式编程语言,充分利用了函数式编程的优势,并且设计为高效、可扩展和易于维护。 #### ...

Global site tag (gtag.js) - Google Analytics