为什么 OTP 中的类型规范会重复参数名称?
Why do type specs in OTP repeat parameter names?
在 Erlang 标准库的类型规范中,规范中几乎没有任何类型,直到 when
子句。例如,lists:member/2
的规范是这样的:
-spec member(Elem, List) -> boolean() when
Elem :: T,
List :: [T],
T :: term().
而不是:
-spec member(Elem :: T, List :: [T]) -> boolean() when
T :: term().
这有什么原因吗?从透析器的角度来看,这两种样式是否相同?
这样做是因为如果这样做的话,从规范生成的文档看起来会更好。
在 Erlang 标准库的类型规范中,规范中几乎没有任何类型,直到 when
子句。例如,lists:member/2
的规范是这样的:
-spec member(Elem, List) -> boolean() when
Elem :: T,
List :: [T],
T :: term().
而不是:
-spec member(Elem :: T, List :: [T]) -> boolean() when
T :: term().
这有什么原因吗?从透析器的角度来看,这两种样式是否相同?
这样做是因为如果这样做的话,从规范生成的文档看起来会更好。