无法理解泛型如何工作

时间:2016-04-27 16:27:17

标签: ada gnat

我有一个名为Linked_List(.ads)的包。下面是代码:

// mix-service.js
var Mix = require('../models/mix');

module.exports = {
    mixTitle: function(mix_id) {
        return Mix
          .findOne({ 'mix_id' : mix_id }, 'title')
          .then(mix => {
            console.log(mix.title); // This correctly prints the title field
            return mix.title;
          });
    }
};

// calling module
var mixSrvc = require('../mix-service');

mixSrvc
  .mixTitle(1)
  .then(mixTitle => console.log(mixTitle))
  .catch(err => console.log(err));

以下是包中包含main函数(main.adb)

的代码
Generic
   type T is private;
package Linked_List is
   type List is tagged record
       Data : T;
   end record;
end Linked_List;

我收到此错误:

with Ada.Text_IO; use Ada.Text_IO;
with Linked_List;
procedure Main is
  type ListOfIntegers is new Linked_List(T => Integer);
begin
   null;
end Main;

感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

new Linked_List(T => Integer)定义了一个新的,而不是新的类型。您获得的错误消息是因为编译器认为您正在声明类型,因此在第30列看到包的名称会使其混淆;它想看到(子)类型的名称。

第4行应该是

package ListOfIntegers is new Linked_List(T => Integer);

之后有一个类型ListOfIntegers.List,所以你可以写

My_List : ListOfIntegers.List;

你可能会发现不得不说ListOfIntegers.一直很烦人;你可以说

use ListOfIntegers;

之后你可以写

My_List : List;

但通常认为最好不要过度使用(如果你有几十个“软件”包,“使用”它们都会让你很难知道你指的是哪个)。

顺便说一下,正常的Ada用法是使用下划线来分隔标识符中的单词:List_Of_Names