[Elang-003][OTP]Efficiency Guide User's Guide->Common Caveats
7218 ワード
:http://www.erlang.org/doc/efficiency_guide/commoncaveats.html
( , )
3
, , 。
3.1 timer
erlang:send_after/3 erlang:start_time/3 , timer 。timer , , ( SMP )。
timer ( timer:tc/3,timer:sleep/1), call timer_server , 。
3.2 list_to_atom/1
。 , 。 ( 1048576), 。
, 。 , list_to_existing_atom/1 “ ”。( , , 。)
list_to_atom/1 , apply/3, , 。
apply(list_to_atom("some_prefix"++Var), foo, Args)
3.3 length/1
, tuple_size/1,byte_size/1 bit_size/1 。
length/1 , C 。 , , length/1。
length/1 ,
foo(L) when length(L) >= 3 -> ...
foo([_,_,_|_]=L) -> ...
( , L ,length(L) , 。)
3.4 setelement/3
setelement/3 , , setelement/3 。
, 。 , setelement/3 setelement 。
multiple_setelement(T0) -> T1 = setelement(9, T0, bar), T2 = setelement(7, T1, foobar), setelement(5, T2, new_value).
setelement/3 , 。 setelement/3 。
, :
インデックス(setelement/3の最初のパラメータ)は、変数や表現ではなく整数として書かれています. インデックスは、順序を逆にして与えられなければならない. は、setelement/3の呼び出しの間に他の関数の呼び出しができない. setelement/3から返されるタプルは、後続のsetelement/3呼び出しとしてのみ使用されなければならない. multiple_setlement/1 , , , 。
3.5 size/1
size/1 binary 。
R12B tuple_size/1 byte_size/1 。 Dialyzer bugs。
3.6 split_binary/2
split_binary/2 , split_binary/2 。
DO<<Bin1:Num/binary,Bin2/binary>> = Bin,
DO NOT
{Bin1,Bin2} = split_binary(Bin, Num)
3.7 '--'
DO NOT:'--' , , , 。
HugeList1 -- HugeList2
ordsets :
DOHugeSet1 = ordsets:from_list(HugeList1), HugeSet2 = ordsets:from_list(HugeList2), ordsets:subtract(HugeSet1, HugeSet2)
, , 。 , :
セット=gb_sets:from_list(HugList 2),[E𞓜E]<-Huge List 1,not gb sets:is element(E,Set)]DO
1: , '--' ( HugeList1 HugeList2 ;'--' 。)
2: '==' , '--' '=:=' 。 , sets gb_sets, sets:from_list/1 gb_sets:from_list/1 。
'--' :OK
HugeList1 -- [Element]
( , , :http://www.cnblogs.com/liangjingyang/archive/2012/06/20/2557065.html)