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

为什么80%的码农都做不了架构师?>>>   hot3.png

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的类型只能在定义的模块内部使用。




转载于:https://my.oschina.net/astute/blog/118680

你可能感兴趣的:(erlang的类型规范type和opaque的区别)