首页 > 解决方案 > Ada 如何实现 Packages?

问题描述

Ada 编程语言是如何实现包的?它使用结构吗?一个记录?如果可能的话,我在哪里可以找到这个实现的例子?

标签: programming-languagesada

解决方案


该语言并没有真正指定应该如何完成底层实现。这由编译器供应商决定。我怀疑他们使用结构或记录。您找到的任何答案都是特定于供应商的,而不是特定于语言的。值得注意的是,最常见的编译器 GNAT 是开源的,因此可以查看源代码并尝试了解它们是如何实现的。同样,这只是一种可能的实现方式。其他编译器可能会以不同的方式执行此操作。

如果您只是指一个包的示例可能是什么样的:

清空 my_package.ads:

package My_Package is
    -- Empty package
end My_Package;

my_package.ads 具有类似“类”的类型:

package My_Package is

   type My_Type is tagged private;

   function Get_Value(Self : My_Type) return Integer;

private

   type My_Type is tagged record
      Value : Integer := 2;
   end record;

end My_Package;

带有操作定义的 my_package.adb:

package body My_Package is

   function Get_Value(Self : My_Type) return Integer is
   begin
      return Self.Value;
   end Get_Value;

end My_Package;

如您所见,包可以是空的。它们可以具有类型、操作或两者兼有。包是处理封装的地方(与 C++ 和 Java 之类的类型相反)。因此,您可以在包中包含私有类型和操作,但不能进行任何传统的面向对象编程。


推荐阅读