markdown测试:Erlang代码着色
Erlang代码着色效果测试:
%% 一次性也出所有元素:不要这样子做
bad_traverse_to_print() ->
[begin print(Person) end||Person <- ets:tab2list(person)],
ok.
%%从第一个一直遍历到最后一个:数据要从erts内部搬到process 当ets很大的时候就效率低
good_traverse_to_print() ->
good_traverse_to_print2(ets:first(person)).
good_traverse_to_print2('$end_of_table') ->
ok;
good_traverse_to_print2(Key) ->
[Person] = ets:lookup(person,Key),
print(Person),
good_traverse_to_print2(ets:next(person,Key)).
%%分页:最佳实践使用ets:select match MatchSpec:ets内部实现了把matchspec编译成opcode 然后eval的时候把需要的数据才拷贝到process去 大大减少了数据量
best_traverse_to_print() ->
case ets:match(person,'$1',10) of
{PersonList,'$end_of_table'} ->
[begin print(Person) end|| [Person] <- PersonList];
{PersonList,Key} ->
[begin print(Person) end|| [Person] <- PersonList],
best_traverse_to_print2(Key)
end,
ok.
best_traverse_to_print2(Key) ->
case ets:match(Key) of
{PersonList,'$end_of_table'} ->
[begin print(Person) end|| [Person] <- PersonList];
{PersonList,Key2} ->
[begin print(Person) end|| [Person] <- PersonList],
best_traverse_to_print2(Key2)
end.
print(Person) ->
io:format("Name~p Phone:~p~n",[Person#person.name, Person#person.phone]),
ok.