Erlang中声明自定义类型,使用关键字type和opaque。
1.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}).
2.opaque的使用
-module(module1).
-export_type([my_tup2/0]).
-opaque my_tup2() :: {my_tup2, atom(), atom()}.
使用dialyzer分析,会发现警告;这是因为opaque的类型只能在定义的模块内部使用。
声明为的类型opaque表示其结构不应该在其定义模块之外可见的术语集。也就是说,只有定义它们的模块才允许依赖于它们的术语结构。