typespec中的二进制,String.t,char_list和[char]之间的区别

lap*_*ira 3 elixir typespec

定义typespec时,binary,String.t,char_list,[char]等之间有何区别?

@spec method(binary) :: binary
Run Code Online (Sandbox Code Playgroud)

@spec method(String.t) :: String.t
Run Code Online (Sandbox Code Playgroud)

它们相等吗?Doc说:

  • 二进制用于Elixir字符串。
  • char_list用于Erlang字符串。定义为[char]。

Dog*_*ert 6

String.t 与相同binary,请参见此处的定义。

char_list不仅仅是简单的字符列表。unicode在Erlang 中的模块中定义为:

maybe_improper_list(char() | unicode_binary() | charlist(),
                    unicode_binary() | [])
Run Code Online (Sandbox Code Playgroud)

因此,它既包含正确的列表,也包含不正确的列表,并且该列表可以包含字符,二进制文件或字符列表或空列表。

  • 我现在找不到参考,但据我所记得,当您将String.t用于文本数据(UTF-8)时,首选使用String.t;对于任意数据(例如网络数据包),首选使用Binary。压缩数据等 (2认同)