我需要一个包含API的容器:
addKeyValuePair(containerRef, [key, value])
searchByKey(containerRef, key) #that would return NULL or `value`
如何在Maple(15)中创建这样的东西?
答案 0 :(得分:1)
您可能只想将常规索引编入table。请注意,以下未分配的名称Y
只需分配到某个已编入索引的条目table
即可成为Y[a]
。
restart:
Y[a]:=211:
Y[a];
211
Y[b];
Y[b]
assigned(Y[a]);
true
assigned(Y[b]);
false
eval(Y);
table([a = 211])
说了这么多,获得你所描述的功能只是一小部分包装,当Y[b]
尚未分配时,访问NULL
会返回Y[b]
等等。
您可以自定义(或删除)key
属于symbol
类型的错误检查和限制,因为Maple允许更频繁地对table
编制索引。
restart:
addKeyValuePair:=proc(containerRef::{indexed,symbol}, L::list)
if nops(L) <> 2 then
error "expecting list with two entries"; end if;
if not type(L[1], symbol) then
error "expecting list with symbol as first entry"; end if;
containerRef[L[1]]:=L[2];
NULL;
end proc:
searchByKey:=proc(containerRef::{indexed,symbol}, key::name)
if assigned(containerRef[key]) then
containerRef[key];
else
NULL;
end if;
end proc:
addKeyValuePair( Y, [a, 4.5] );
searchByKey( Y, a );
4.5
searchByKey( Y, b );
searchByKey( Q, b );
addKeyValuePair( Y, [a, 211] );
searchByKey( Y, a );
211
addKeyValuePair( Y, [c] );
Error, (in addKeyValuePair) expecting list with two entries
addKeyValuePair( Y, [2.34, 211] );
Error, (in addKeyValuePair) expecting list with symbol as first entry
table
是一个可变数据结构。它的类型为last_name_eval,因此它(有效地)通过“引用”作为过程调用的参数传递。