如何使用“separate”关键字

How do I use “separate" keyword

我无法理解 Ada 中的关键字 separate 及其深度概念。请举个小例子帮助我理解?

假设我有一个嵌套过程

with ada.text_io; use ada.text_io;
procedure main is
   procedure proc is
   begin
      put_line ("i am proc");
   end proc;
begin
   put_line ("main");
end main;

如何使用单独的关键字?

separate 关键字创建一个编译单元,一个独立编译的子单元。 separate的参数指的是subunit是

的子单元所在的包

因此,如果您有一个包主体 X,那么您从中删除过程 Y,您通过创建一个新文件来创建 X 的子单元,在其中放置 Y,并将 "separate(X)" 放在开头文件的一部分,以表明 Y 确实是 X 的一部分。

您主要使用 separate 关键字来实现两种效果之一。

  1. OS具体操作。 (将2个版本的程序/函数放在不同的目录,并针对2个不同的目标进行编译)
  2. 将冗长的过程与周围的代码分开。

这是一个语法示例。

package_x.ads

package Package_X is

   procedure Foo;
   procedure Sep;

end Package_X;

package_x.adb

package body Package_X is

   procedure Foo is 
   begin
      null;
   end Foo;

   procedure Sep is separate;

end Package_X;

package_x-sep.adb

separate (Package_X) procedure Sep is 
begin
   null;
end Sep;