Tôi mới tham gia Ada.Thông số Ada out
tôi thấy question này, nhưng tôi là một chút khác nhau:
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;
Câu hỏi của tôi là với tham số "out" trong P2: sẽ các bộ phận khác của một loại composit được undefined nếu P2 không rõ ràng đặt chúng. Nói cách khác, nếu P1 được gọi, đầu ra có chắc chắn đúng hay sai? Hoặc có thể mơ hồ?
Điều này link nói về "khởi tạo mặc định", nhưng ví dụ trên của tôi không rõ ràng (có chủ đích).
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.
Tôi không chắc liệu đây có phải là hành vi cụ thể của trình biên dịch không? Một trình biên dịch có thể vượt qua bằng cách sao chép hành xử giống nhau không?Tôi sẽ cố gắng không mạo hiểm nó! –
Cảm ơn bạn @trashgod. Nếu nó là trình biên dịch phụ thuộc, sau đó sử dụng "in out" cách chắc chắn duy nhất để đảm bảo nó hoạt động (nếu bạn không chắc chắn bản ghi được truyền trong đã khởi tạo mặc định): 'procedure P2 (arg1: in out A) là ' ' bắt đầu' 'arg1.y: = 200;' 'kết thúc P2;' –
@TNguyen: Tôi đã xây dựng ở trên. – trashgod