Effective Erlang —— 二进制型的构造和匹配

在 R12B 中,构造和匹配二进制型最自然的方式比前版中的要快得多。你可用如下简单的代码来构造一个二进制型:

这么写(在 R12B 中)/求别这么写(在 R12B 之前的版本中)

my_list_to_binary(List) -> my_list_to_binary(List, <<>>).
my_list_to_binary([H|T], Acc) -> my_list_to_binary(T, <<Acc/binary,H>>);
my_list_to_binary([], Acc) -> Acc.


在 R12B 之前的发行版中,在每次迭代中 Acc 都会被复制一次。在 R12B 中,Acc 只在第一次迭代中被复制,并且在此之后,会开辟额外的内存空间。在下一轮迭代中,H 被写入额外的内存。当额外的内存用满时,该二进制型会重新扩展更多的额外内存。被扩展的内存是二进制型的两倍大小,或者是256,无论哪个都比二进制型大。

匹配二进制型最自然的方式现在是最快的。

这么写(在 R12B 中)

my_binary_to_list(<<H,T/binary>>) -> [H|my_binary_to_list(T)];
my_binary_to_list(<<>>) -> [].

 

 

 

posted @ 2015-08-18 13:55  bigwhite  阅读(127)  评论(0)    收藏  举报