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

<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().                       


分享到:
评论

相关推荐

    <27>erlang record

    NULL 博文链接:https://ZacMa.iteye.com/blog/1976833

    Java轻量级线程库Quasar.zip

    Quasar 是一个 Java 库,提供了高性能、轻量级的线程,类似 Go 语言的 Channel,Erlang 语言的 Actor 和其他异步编程工具。 In Maven: &lt;dependency&gt;  &lt;groupId&gt;co.paralleluniverse&lt;/groupId&gt;  &lt;artifactId&gt;quasar...

    erlang_ls:Erlang 语言服务器

    最低要求 快速开始编译项目: make要在/usr/local/bin安装生成的erlang_ls escript: make install命令行参数这些是可以提供给erlang_ls脚本的命令行参数: Usage: Erlang LS [-v] [-t [ &lt; transport&gt; ]] [-p [ &lt; ...

    emqtt-bench:Erlang MQTT v5.0基准测试工具

    Usage: emqtt_bench conn [--help &lt; help&gt; ] [-h [ &lt; host&gt; ]] [-p [ &lt; port&gt; ]] [-c [ &lt; count&gt; ]] [-n [ &lt; startnumber&gt; ]] [-i [ &lt; interval&gt; ]] [-u &lt; username&gt; ] [-P &lt; password&gt; ] [-k [ &lt; keepalive

    scalang:Scalang是一个scala包装器,可以轻松编写与erlang交互的服务

    Scalang是消息传递和参与者库,它使Scala和Erlang应用程序可以轻松进行通信。 Scalang包含Erlang分布式节点协议的完整实现。 它提供了一个面向参与者的API ,该API可用于以惯用的,符合OTP的方式与Erlang节点进行...

    migerl:另一个用Erlang编写的数据库迁移工具

    米格尔用Erlang编写的另一个数据库迁移工具。它能做什么管理已应用/未应用的...]] [-a [&lt;all&gt;]] [-v [&lt;version&gt;]] [-h [&lt;help&gt;]] [command ...] -c, --config Config file -e, --env Env name in config [default: de

    erlang 中文基础教程

    erlang 中文基础教程erlang 中文基础教程

    erlang-mgf:Erlang分布矩生成函数(MGF)

    对于t &lt; lambda&gt; 0是分布的速率参数。 在t &gt;= lambda的情况下,未定义MGF,并且此模块返回NaN 。 安装 $ npm install distributions-erlang-mgf 要在浏览器中使用,请使用 。 用法 var mgf = require ( '...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

     Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。 使用Erlang编写出的应用运行时...

    mule-erlang-transport:一个 Mule 传输器,可以向 Erlang 节点发送消息和从 Erlang 节点接收消息

    骡子郎运输 可以向 Erlang 节点发送消息和从 ... 快照构建在 Sonatype OSS 快照存储库中可用: &lt; repository&gt; &lt; id&gt;ossrh&lt;/ id&gt; &lt; url&gt;https://oss.sonatype.org/content/repositories/snapshots&lt;/ url&gt; &lt; snapshots&gt;

    High Performance Erlang

    &lt;&lt;High Performance Erlang&gt;&gt;,英文,PDF格式

    硝烟中的erlang

    诊断以及调试生产环境中的Erlang 系统。在程序员学习新的语言和环境时,都需要一个摸索 阶段,也就是学会在社团的帮助下,脱离指南,解决实际问题。 本书假设读者精通基本的Erlang和OTP框架。在本书中,会对一些难以...

    ErlangPlayBase:动手 Erlang 教程会话的起点

    Erlang GOTONight 基础项目;... $&gt; erl -pa ebin -boot start_sasl -name &lt;YOUR&gt;@&lt;IP&gt; -setcookie omnomnom &gt; net_adm:ping('chatserver@&lt;IP&gt;'). &gt; chat_client:start(chatroom:global_chatroom())

    Erlang中文手册

    这是一个入门指导教你开始使用Erlang。...到或是在&lt;Erlang参考手册&gt;中找得到。 我也假设这不是你每一次接触计机算,而且了解编程的最基本的思想。不过不要着急,我并 不会假定你是一个有经验的开发人员。

    erlang中文基础教程

    erlang中文基础教程

    rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,

    rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang

    Erlang趣学指南

    (494页带目录的高清扫描版) 这是一本讲解Erlang编程语言的入门指南,内容通俗...内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。

    erlang_v8_lib:一个小包装器,围绕erlang-v8创建一个迷你框架

    一个简单的模块系统,可轻松连接JavaScript和Erlang。 随附一些电池模块 入门 编译并启动一个shell: $ make $ make shell 确保已启动所有必需的应用程序,启动lib超级用户(请注意,这是一个单独的强制性步骤。...

Global site tag (gtag.js) - Google Analytics