Как передать константу массива переменной длины в качестве параметра? - PullRequest
0 голосов
/ 13 июня 2018

У меня есть много констант 2-мерного массива с одной размерной переменной в длину, например:

const
  ThiamineRDA: array[0..2, 0..3] of Double =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3), (0, 1, 3, 0.5));
  RiboflavinRDA: array[0..1, 0..3] of Double =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3));

И я хочу передать эти константы в качестве параметра в процедуру:

  LoadIntakes(Item, ThiamineRDA);

Но как мне определить эту процедуру, чтобы разрешить этот параметр?

procedure LoadIntakes(Item:PNutrientInfo; IntakesList: array of... ???? );
begin
 //.....
end;

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Если вы хотите передать многомерные открытые массивы в качестве параметра какой-либо процедуре, вам сначала нужно определить специальный тип для такого массива.Затем вы даже можете определить массивы констант этого типа.

Итак, ваш код будет выглядеть так:

type
  ThiamineRDA = array[0..2, 0..3] of Double;
  RiboflavinRDA = array[0..1, 0..3] of Double;

...

const
  ArThiamineRDA: ThiamineRDA =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3), (0, 1, 3, 0.5));
  ArRiboflavinRDA: RiboflavinRDA =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3));

...

  LoadIntakes(Item, ArThiamineRDA);
0 голосов
/ 13 июня 2018

Вы не можете пропустить открытые массивы, которые открыты в двух измерениях.Но если одно из измерений имеет фиксированный размер, вы можете сделать это следующим образом:

(я пропустил ваш первый параметр, чтобы я мог проверить, что он компилируется)

type
  TQArray = array[0..3] of double;
const
  ThiamineRDA: array[0..2] of TQArray =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3), (0, 1, 3, 0.5));
  RiboflavinRDA: array[0..1] of TQArray =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3));

procedure LoadIntakes( IntakesList: array of TQArray );
begin
 //.....
end;

procedure Test;
begin
  LoadIntakes( ThiamineRDA );
end;
...