<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().
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值