Ada için yeni. Ada parametresi
Bu question gördüm, ama benim biraz farklıdır:type A is record
x : integer;
y : integer;
end record;
procedure P1 is
temp : A;
begin
temp.x := 100;
P2(temp);
if temp.x = 100 then
Ada.Text_IO.Put_Line("true");
else
Ada.Text_IO.Put_Line("false");
end if;
end One;
procedure P2 (arg1 : out A) is
begin
arg1.y := 200;
end P2;
Sorum P2 olarak "out" parametresi ile: P2 açıkça olmasaydı kompozit türdeki diğer kısımları tanımsız edilecektir onları ayarla. Başka bir deyişle, eğer P1 çağrılırsa, çıktı kesinlikle doğru mu yoksa yanlış mı? Ya da belki belirsiz?
"Varsayılan başlatma" ile ilgili bu link görüşmeler, ama benim örnek yukarıda (bilerek) açıkça yoktur.
Safety is preserved by ensuring that a subcomponent does not become
"deinitialized" by being passed as an out parameter. If any subcomponent
of a type passed by copy has default initialization, then the whole
object is copied in at the start of the call so that the value of such a
subcomponent is not lost as a result of a subprogram call during which
no assignment is made to the subcomponent. But in practice records are
usually passed by reference anyway.
Bunun derleyici özgü davranış olup olmadığından emin değilim? Kopyala geçebilen bir derleyici aynı davranır mı?Risk almaya çalışmam! –
Teşekkür ederiz @trashgod. Derleyici bağımlıysa, o zaman çalıştığından emin olmak için "in out" (çıkış kaydedilen varsayılan başlatma var) emin değilseniz, "out out" kullanıyor: 'yordam P2 (arg1: out A) olduğunu 'begin' ' arg1.y: = 200; ' 'p P2;' –
@TNguyen: Yukarıda ayrıntılandırdım. – trashgod