在Ada Generic软件包中,如果我有一个处理您放入的任何元素的软件包,如果我想证明软件包正在运行,我是否必须运行两个单独的客户端程序来显示Integer然后再显示Float,或者我可以在同一个程序中完成所有这些吗?
答案 0 :(得分:1)
泛型参数应包含用于打印传递给包的通用数据类型的通用过程参数。这将允许数据类型为任何东西,并且通用包的编写者不必关心它的输出方式。
secondMin(L, Min2):-
minlist(L,Min),
delete(L,Min,Li), %no prob ver
mino(L, k), %return k as the 2nd minimum of L
Min2 is k. %Min2 is k.
//////////some code here////////////
mino(List, sec):-
sec is minlist(List, Min). %min 2 is the minimum of Li
答案 1 :(得分:0)
IIUC,"内部" package也是一个,它依赖于外包的通用形式,至少就测试而言。然后有两种情况。
如果内部包是普通包,例如Integer_Text_IO
,它只能处理有问题的整数类型,这是编译时间。
内部包是一种可以通过使用外部通用包的通用形式来实例化的。
在第一种情况下,编译器无法拒绝,因为Integer_Text_IO
不是针对浮点操作数。因此,您必须设置单独的测试用例。
在第二种情况下,结果取决于&#34;内部实例&#34;。由于编译器在给定类型时无法创建通用包,因此它只能实例化存在的通用包。后者必须具有匹配的形式要求。也就是说,外部泛型和待实例化内部泛型的通用形式类型必须匹配:它们不能来自互斥类别,如range <>
和digits <>
。
有时,值得考虑的是,人们可以指定&#34;内部通用&#34;通过使它成为外部通用的形式参数:
generic
type X (<>) is limited private;
package Taking_Any is
-- ... operations for both FPT and integer types
end Taking_Any;
generic
type T is private;
with package Works_With_Any is new Taking_Any (<>);
package Outer is
package Any_Instance is new Taking_Any (T);
end Outer;