Функция для возврата расширенного массива в VCL Form Delphi

Возврат массива с использованием функции типа консоли может быть выполнен, но я пытаюсь создать функцию, которая принимает целое число n в качестве входных данных и возвращает массив, расширенный в VCL-форме Delphi. Как мы можем сделать это?


person Jack    schedule 16.06.2014    source источник


Ответы (3)


В современных версиях Delphi следует использовать общий массив TArray<T>. Как это:

function Foo(N: Integer): TArray<Extended>;
var
  i: Integer;
begin
  SetLength(Result, N);
  for i := 0 to N-1 do begin
    Result[i] := i;
  end;
end;

Я хотел бы подчеркнуть, что использование Extended, вероятно, является ошибкой. Это довольно необычный и плохо работающий 10-байтовый тип с плавающей запятой. Этот тип доступен только на ограниченном числе процессоров. Почти все вычисления с плавающей запятой в реальном мире выполняются с использованием Single или Double, 4-байтовых и 8-байтовых типов данных с плавающей запятой IEEE-754.

person David Heffernan    schedule 17.06.2014

Если мне не изменяет память, это нужно сделать, набрав его заново, то есть:

type
  TResultType: array of extended;

function DoSomthing(): TResultType
begin
  SetLength(Result, 2);
  Result[0] := 1.2;
  Result[1] := 3.4;
end;
person Slade    schedule 16.06.2014
comment
он выдает ошибку «TResultType не имеет соответствующего компонента». Может быть, я был недостаточно ясен. Функция используется для создания массива (X[n]), который можно вызвать во время процедуры для возврата определенного значения при текущем значении n. - person Jack; 16.06.2014
comment
@Jack Код в вопросе не приводит к ошибке. Пожалуйста, не ждите, что мы будем комментировать ваш код, который мы не видим и который вы нам не покажете. Я призываю вас замедлиться и изучить основы перед кодированием. - person David Heffernan; 17.06.2014

Это не проблема VCL/консоли, поскольку объявления функций не зависят от типа приложения, которое вы пишете.

Функции Delphi (или любого Pascal) могут возвращать любой именованный тип данных. Пока тип массива объявлен в разделе типов, функция может его обработать.

eg.

type
  ExtArray : array of extended;

function IntToArray(i:integer):ExtArray;
begin
  ...
end;
person BT64    schedule 16.06.2014
comment
Похоже, Слэйд меня опередил! - person BT64; 16.06.2014