在Ada中,分配Object.All意味着什么?

在Ada中,分配Object.All意味着什么?,ada,Ada,考虑以下任务: procedure Assign(Original : myAccessType) is Other : myAccessType; begin Other.all := Original.all; Other.IntegerValue := Original.IntegerValue; end 我不太确定第一个作业是做什么的。作业中.All的意义是什么?还有,整数值的第二个赋值是否仍然需要?。all是访问类型的显式解引用。。all是访问类型的

考虑以下任务:

procedure Assign(Original : myAccessType) is    
Other : myAccessType;

begin    
   Other.all := Original.all;
   Other.IntegerValue := Original.IntegerValue;  
end

我不太确定第一个作业是做什么的。作业中
.All
的意义是什么?还有,整数值的第二个赋值是否仍然需要?

。all
是访问类型的显式解引用。

。all
是访问类型的显式解引用。

第一个赋值将引发
约束错误
,因为在Ada中,访问值被初始化为
null

假设你改写了

Other : myAccessType := new myType;
然后

这意味着(除非其中使用了
Ada.Finalization
),由
Original
指向的位将被复制到由
Other
指向的位中

因此,没有必要做第二项作业

我不是一个专业的C程序员,但我认为你的代码相当于

typedef struct myType {
  int IntegerValue;
} *myAccessType;

void assign(myAccessType original)
{
  myAccessType other;     // uninitialized
  *other = *original;
  other->IntegerValue = original->IntegerValue;
}

第一个赋值将引发
Constraint\u Error
,因为在Ada中,访问值被初始化为
null

假设你改写了

Other : myAccessType := new myType;
然后

这意味着(除非其中使用了
Ada.Finalization
),由
Original
指向的位将被复制到由
Other
指向的位中

因此,没有必要做第二项作业

我不是一个专业的C程序员,但我认为你的代码相当于

typedef struct myType {
  int IntegerValue;
} *myAccessType;

void assign(myAccessType original)
{
  myAccessType other;     // uninitialized
  *other = *original;
  other->IntegerValue = original->IntegerValue;
}

深拷贝而不是浅拷贝。因此,第二个任务是多余的。任何关于Ada的教科书都应该回答这个问题。我做了一些搜索,但没有找到一个有意义的答案。深拷贝而不是浅拷贝。因此,第二个任务是多余的。任何关于Ada的教科书都应该回答这个问题。我做了一些搜索,但没有找到一个有意义的答案。所以它实际上是在创建一个副本,而不仅仅是一个参考(在C术语中称为“深度副本”),是的,但只有一个级别;如果上面的
myType
包含指向某个对象的指针,那么该指针将被复制,并且两个副本将指向同一个内存。我认为这是一个公平的权衡。在我的特殊情况下,我不认为这会带来问题,所以它实际上是在创建一个副本,而不仅仅是一个引用(在C术语中称为“深度副本”),是的,但只是一个级别;如果上面的
myType
包含指向某个对象的指针,那么该指针将被复制,并且两个副本将指向同一个内存。我认为这是一个公平的权衡。在我的特殊情况下,我不认为这会带来问题。它实际上回答了问题。作为最初的提问者,我尊重地不同意。关于堆栈溢出的答案应详细说明,直到提供明确的答案以及支持的背景信息。如果提问者(我)对正在发生的事情感到困惑,那么像西蒙这样的回答对未来的读者会更有帮助。这个答案没有回答我的任何一个问题,特别是第二个关于实际用法的问题。它实际上回答了这个问题。作为最初的提问者,我恭敬地表示不同意。关于堆栈溢出的答案应详细说明,直到提供明确的答案以及支持的背景信息。如果提问者(我)对正在发生的事情感到困惑,那么像西蒙这样的回答对未来的读者会更有帮助。这个答案没有回答我的任何一个问题,特别是第二个问题,它涉及实际用法。