限制Ada中特定其他函数调用的函数

限制Ada中特定其他函数调用的函数,ada,nested,Ada,Nested,假设我有一个只想由另一个特定过程调用的过程。是否可以对该过程施加限制,使其只能由指定的调用过程引用?我真正想知道的是,是否有其他方法来编写代码,这样您就不必在过程中嵌套/嵌入过程,从而强制限定范围 procedure one procedure two begin blah end two; begin end one; 编辑:这是针对Ada代码的,顺便说一句。如果您将过程一单独放入一个包中,并将过程二放入其私有部分,那么其他例程将无法调用它(除非写入包或子包中)

假设我有一个只想由另一个特定过程调用的过程。是否可以对该过程施加限制,使其只能由指定的调用过程引用?我真正想知道的是,是否有其他方法来编写代码,这样您就不必在过程中嵌套/嵌入过程,从而强制限定范围

procedure one
   procedure two
   begin
      blah
   end two;
begin
end one;

编辑:这是针对Ada代码的,顺便说一句。

如果您将过程一单独放入一个包中,并将过程二放入其私有部分,那么其他例程将无法调用它(除非写入包或子包中)

您还可以创建一个带有特定于
过程1
的任何数据的标记类型,并将
过程2
作为参数放入其包中。然后其他人可能会调用
过程二
,但不会调用
过程一的对象


我有点困惑,为什么你想在不使用作用域的情况下重新创建Ada的作用域行为。接受这种语言。

好吧,如果你把
过程一
单独放在一个包中,把
过程二
放在它的
私有
部分,那么没有其他例程能够调用它(除非写入包或子包)

您还可以创建一个带有特定于
过程1
的任何数据的标记类型,并将
过程2
作为参数放入其包中。然后其他人可能会调用
过程二
,但不会调用
过程一的对象

我有点困惑,为什么你想在不使用作用域的情况下重新创建Ada的作用域行为。接受语言。

不(一般来说)

公共过程是一个公共过程,因此它可以被任何与它“一起”的东西(如果它是一个独立的过程)或声明它的包调用

如果其中任何一种可能适合您的实现方法,则有几种方法可以限制其可见性:

  • 在包的私有部分或包体中声明过程。那么只有该包中的子程序才能访问它
  • 将供应包或子程序声明为,则那些“带有”它的包只能引用其私有部分或包体中供应单元的内容(包括调用其子程序)
  • “Private with”供应包,因此它只能在其私有部分/包体中引用包
但正如T.E.D.所说,使用该语言并利用其功能,而不是试图重新创建其他语言的结构。

不(一般来说)

公共过程是一个公共过程,因此它可以被任何与它“一起”的东西(如果它是一个独立的过程)或声明它的包调用

如果其中任何一种可能适合您的实现方法,则有几种方法可以限制其可见性:

  • 在包的私有部分或包体中声明过程。那么只有该包中的子程序才能访问它
  • 将供应包或子程序声明为,则那些“带有”它的包只能引用其私有部分或包体中供应单元的内容(包括调用其子程序)
  • “Private with”供应包,因此它只能在其私有部分/包体中引用包

但正如T.E.D.所说,使用该语言并利用其功能,而不是试图重新创建其他语言的结构。

我有两个可能的建议。第一个问题有点奇怪,有点离题,但我想提出它,以防您不知道,因为大多数答案都与隐藏代码可见性或更改关系有关

> p>可以考虑使用艾达任务特性,并使用“调用方属性”。通常,这仅用于任务分配,然后“调用者”名称仅表示接收任务的调用任务。但一旦进入接收任务的条目,您就可以使用调用方名称快速结束或以其他方式将调用方标记为错误或不是您期望的调用方。这基本上是将一个“看门人”放在任务条目中,然后该条目可以决定让他们继续,让调用者重新进入另一个条目,或者执行其他操作。但同样,只有当您的任务使用来自另一个任务的已发布调用时,这才真正起作用。这是我在Ada中所知道的唯一一件事,在Ada中,您可以检测谁给您打电话,并在运行时对其进行处理

但是,您的问题似乎想要使用范围,所以我同意这里所说的,只补充说,在艾达中,有一个正常的嵌套过程(可读性),但除此之外,您还可以考虑创建子包和反向使用层次结构。这就是将孩子暴露给程序员,并使家长只能从孩子那里访问。将父级设计为范围非常有限,这样父级的公共规范对于任何没有父级规范私有视图的调用方来说都毫无价值。这样,您就可以进行分离,只有子级可以访问父级中的函数,并且可以实际调用它们,因为他们拥有父级规范的完整视图类型和函数定义


祝你好运。我有两个可能的建议。第一个问题有点奇怪,有点离题,但我想提出它,以防您不知道,因为大多数答案都与隐藏代码可见性或更改关系有关

> p>可以考虑使用艾达任务特性,并使用“调用方属性”。正常的