在Ada通用包中

时间:2016-11-14 22:29:18

标签: generics packages ada

在Ada Generic软件包中,如果我有一个处理您放入的任何元素的软件包,如果我想证明软件包正在运行,我是否必须运行两个单独的客户端程序来显示Integer然后再显示Float,或者我可以在同一个程序中完成所有这些吗?

2 个答案:

答案 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也是一个,它依赖于外包的通用形式,至少就测试而言。然后有两种情况。

  1. 如果内部包是普通包,例如Integer_Text_IO,它只能处理有问题的整数类型,这是编译时间。

  2. 内部包是一种可以通过使用外部通用包的通用形式来实例化的。

  3. 在第一种情况下,编译器无法拒绝,因为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;