erlang编程术语(二)

带状态的模块

状态和模块名封装到一起,隐藏信息和创建适配器模块
元组模块:

-module(counter).
-export([bump/2, read/1]).

bump(N, {counter, K}) -> {counter, N + K}.
read({counter, N}) -> N.

在这里插入图片描述
新版本不支持元组模块。

适配器变量

有两个或多个功能相近的库,但无法决定要用哪一个。这些库可能具有相似的函数接口,但性能特征不同。能够在多种不同实现方式做选择。

-module(adapter_db1).
-export([new/1, store/3, lookup/2]).

new(dict) ->
	{?MODULE, dict, dict:new()};

new(lists) ->
	{?MODULE, list, []}.

store(Key, Val, {?MODULE, dict, D}) ->
	D1 = dict:store(Key, Val, D),
	{?MODULE, dict, D1};

store(Key, Val, {?MODULE, list, L}) ->
	L1 = lists:keystore(Key, 1, L, {Key, Val}),
	{?MODULE, list, L1}.

lookup(Key, {?MODULE, dict, D}) ->
	dict:find(Key, D);

lookup(Key, {?MODULE, list, L}) ->
	case lists:keysearch(Key, 1, L) of
		{value, {Key, Val}} ->
			{ok, Val};
		false ->
			error
	end.

将dict和list两种不同的实现方式存在一个元组里,通过第二个字段原子类型来区分实现方式,接口通用且互不干扰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值