Bạn đang gặp phải một understa cơ bản và phổ biến các tham số mảng. Những gì bạn có ở đây:
function execute(var command: array of string): Boolean;
không thực tế là dynamic array. Đây là một số open array parameter.
Bây giờ, bạn có thể truyền một mảng động làm tham số cho hàm nhận mảng mở. Nhưng bạn không thể sửa đổi độ dài của mảng động. Bạn chỉ có thể sửa đổi các phần tử của nó.
Nếu bạn cần sửa đổi độ dài của mảng động, quy trình phải nhận mảng động. Trong Delphi hiện đại cách thành ngữ để viết đó là:
function execute(var command: TArray<string>): Boolean;
Nếu bạn đang sử dụng một phiên bản cũ của Delphi mà không hỗ trợ mảng chung thì bạn cần phải khai báo một kiểu cho các tham số:
type
TStringArray = array of string;
....
function execute(var command: TStringArray): Boolean;
Bạn nên chọn có sử dụng các tham số mảng hoặc mảng động không? Theo tôi, bạn nên luôn sử dụng các mảng mở nếu có thể. Và nếu không thể, sau đó sử dụng mảng động như một khu nghỉ mát cuối cùng. Lý do là một hàm có tham số mảng mở là tổng quát hơn một với tham số mảng động. Ví dụ, bạn có thể vượt qua một mảng có kích thước không đổi như một tham số mảng mở, nhưng không phải nếu hàm nhận được một mảng động.
Nguồn
2012-10-18 16:15:15
Vì trang web này bằng tiếng Anh nên mọi người trả lời câu hỏi của bạn dễ dàng hơn nếu bạn có thể đăng bản dịch tiếng Anh của thông báo lỗi - tôi cho rằng đó là "Mã thông báo không tương thích"? – RobV
@RobV: "Các loại không tương thích", có thể bằng tiếng Đức hoặc tiếng Hà Lan. –
Có, xin lỗi. Nhưng trong trường hợp này, bản dịch tiếng Anh không khác nhiều lắm. Loại không tương thích. –