programming-languages - Ada 如何实现 Packages?
问题描述
Ada 编程语言是如何实现包的?它使用结构吗?一个记录?如果可能的话,我在哪里可以找到这个实现的例子?
解决方案
该语言并没有真正指定应该如何完成底层实现。这由编译器供应商决定。我怀疑他们使用结构或记录。您找到的任何答案都是特定于供应商的,而不是特定于语言的。值得注意的是,最常见的编译器 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 之类的类型相反)。因此,您可以在包中包含私有类型和操作,但不能进行任何传统的面向对象编程。
推荐阅读
- metal - 将 TensorFlow 图转换为 CoreML
- angular - 处理异步 NgRx 操作
- c++ - N叉树的最佳数据结构
- c# - 使用 Windows 身份验证将 SQL Server 与 ASP.NET 连接起来
- java - 没有找到 nextline/int 的行
- python - 为什么显示“TypeError:需要浮点数”?
- excel - VBScript - Excel 工作簿和应用程序的有效关闭
- html - 如何构建和操纵 4 个正方形的颜色?
- macos - 使用 YUV 4:2:0 平面颜色模型在 Mac OS X 上进行 ffmpeg 屏幕截图
- asp.net - 配置转换,转换后无法识别的 XML 命名空间