Ответ Plainth демонстрирует подобный конструктору синтаксис для динамических массивов . Вы можете использовать это непосредственно в массиве TPoint, чтобы получить намного более простую вспомогательную функцию:
type
TPointDynArray = array of TPoint;
T4PointArray = array[0..3] of TPoint;
function PointDynArrayTo4PointArray(const input: TPointDynArray): T4PointArray;
var
i: Integer;
begin
Assert(Length(input) = Length(Result));
for i := 0 to High(input) do
Result[i] := input[i];
end;
class function rotationTable.offsets(pType, rotState, dir: integer): T4PointArray;
begin
// New dynamic-array-constructor syntax here
Result := PointDynArrayTo4PointArray(TPointDynArray.Create(
Point(1,1), Point(1,2), Point(1,1), Point(1,1)));
end;
Но это излишне. Delphi также позволяет вам определять открытые массивы inline, и нет никакого дополнительного вызова конструктора для записи. Результат использует ваш оригинальный предложенный синтаксис, но с массивом, обернутым в вызов функции. Он будет работать во всех версиях Delphi, в то время как приведенный выше синтаксис «Create» довольно новый.
function PointOpenArrayTo4PointArray(const input: array of TPoint): T4PointArray;
var
i: Integer;
begin
Assert(Length(input) = Length(Result));
for i := 0 to High(input) do
Result[i] := input[i];
end;
class function rotationTable.offsets(pType, rotState, dir: integer): T4PointArray;
begin
Result := PointOpenArrayTo4PointArray(
[Point(1,1), Point(1,2), Point(1,1), Point(1,1)]);
end;
Возможно, вы захотите использовать ответ Джерри просто для того, чтобы дать своим массивам точек значащие имена, которые могут помочь при отладке, и одно из восьми магических чисел в этих определениях точек неверно.
Наконец, заметка о том, что имел в виду Delphi, когда сказал, что «синтаксис [1, 2, 3, 4] может работать только для целых чисел». Этот синтаксис определяет set , а не массив. У вас не может быть набора значений записи, но вы можете иметь набор целых чисел. Побочным эффектом является то, что синтаксис для набора целых чисел такой же, как и синтаксис для открытого массива целых чисел. Я думаю, что Delphi использует контекст, чтобы выяснить, какой из них вы имеете в виду, но иногда он может догадаться неправильно.