erlang的类型规范type和opaque的区别

erlang中声明新类型,使用type和opaque关键字

type的使用

-module(module1).

-export_type([my_tup2/0]).

-type my_tup2() :: {my_tup2, atom(), atom()}.
-module(module2).
-export([main/0]).

-spec foo2(module1:my_tup2()) -> ok.
foo2({my_tup2, _, _}) -> ok.

main() ->
    foo2({my_tup2, a, b}).
如果把关键字type换成opaque,

-module(module1).

-export_type([my_tup2/0]).

-opaque my_tup2() :: {my_tup2, atom(), atom()}.
使用dialyzer分析,会发现警告;这是因为opaque的类型只能在定义的模块内部使用。




你可能感兴趣的:(erlang,type,opaque,specification)