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

#delphi #delphi-xe6

#delphi #delphi-xe6

Вопрос:

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

Ответ №1:

В современных версиях 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 с плавающей запятой.

Ответ №2:

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

 type
  TResultType: array of extended;

function DoSomthing(): TResultType
begin
  SetLength(Result, 2);
  Result[0] := 1.2;
  Result[1] := 3.4;
end;
  

Комментарии:

1. выдает ошибку ‘TResultType не имеет соответствующего компонента’. Возможно, я недостаточно ясно выразился. Функция используется для генерации массива (X[n]), который может быть вызван во время процедуры для возврата определенного значения при текущем значении n.

2. @Jack Код в вопросе не приводит к ошибке. Пожалуйста, не ожидайте, что мы будем комментировать ваш код, который мы не видим, который вы нам не покажете. Я призываю вас притормозить и изучить основы перед кодированием.

Ответ №3:

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

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

например.

 type
  ExtArray : array of extended;

function IntToArray(i:integer):ExtArray;
begin
  ...
end;
  

Комментарии:

1. Похоже, Слейд просто опередил меня!