는 D2010을 사용하여 같은 이름의 동적 배열 유형을 가질 수 있습니다,이 같은 일을하고 싶습니다. 내 "aArr"매개 변수는 동적 배열이 아니기 때문에 열린 배열 매개 변수입니다. 그리고 SetLength를 호출 할 수 없습니다. 동적 배열이되도록 매개 변수를 강제 적용하는 유일한 방법은 다음과 같이 형식 이름을 지정하는 것입니다.내가 바르 매개 변수
type
TIntArray = array of integer;
procedure SizeArray(var aArr: TIntArray; aSize: integer);
begin
SetLength(aArr,aSize);
end;
이제 코드가 컴파일됩니다. 그리고 대부분의 경우 잘 작동하지만이 실패
procedure Test;
var
a : array of integer;
begin
SizeArray(a,5);
end;
은 실제와 공식 VAR 매개 변수의 유형이 동일해야하기 때문에 컴파일러는 "정수의 배열"와 동일로 "TIntArray"를 인식하지 못합니다 유형.
그래서, 여기 내 질문 : 호출자가 간단한 "정수 배열"대신 일부 선언 할 수 있도록 열린 배열 대신 동적 배열로 내 var 매개 변수를 식별하는 컴파일러를 얻을 수있는 몇 가지 방법이 있나요? 명명 된 유형?
미리 감사드립니다.
왜 원하십니까/필요합니까? 이것은 표준 파스칼 사용법입니다. TIntArray로 "a"를 선언하면됩니다. 레거시 코드를 작업하는 경우 어쨌든 (SizeArray 호출을 추가) SizeArray가 예제 일뿐입니다. 그렇지 않으면 직접 SetLength를 호출하지 않는 이유> –
호출자가 명명 된 형식을 사용하도록 강요합니다 ,하지만 그건 내 취향이 아니야.나는 그것을 필요로하지 않고 간단한 "X 배열"유형을 받아 들일 수있는 것을 원합니다. 그래서 제가 할 수 있는지 묻고 싶다고 생각했습니다. – TrespassersW
호출자가 올바른 유형을 사용하는 것은 큰 문제가 아닙니다. 레코드 및 클래스 유형으로 항상 그렇게하므로 다른 구조화 된 유형은 없습니까? 코드가 컴파일되지 않기 때문에 프로그래머가 매우 빨리 발견 할 수있는 요구 사항입니다. 따라서 제품을 출시 할 준비가 될 때까지는 시시 때때로 폭탄을 터뜨리는 것과 다름이 없습니다. RTL이 제공하는 유형을 사용한다면, 반드시 자신의 선언을 작성하는 대신 RTL이 제공하는 유형을 사용해야합니다. –