Size: a a a

2020 September 09

АВ

Александр В... in Delphi & Lazarus
Модула или оберон
источник

SB

Sergey Bodrov in Delphi & Lazarus
Похоже на Котлин
источник

Ш

Шляпник in Delphi & Lazarus
Нет, Котлин как и Си-подобные использует фигурные скобки вместо begin/end
источник

SB

Sergey Bodrov in Delphi & Lazarus
Да, точно.
источник

Ш

Шляпник in Delphi & Lazarus
много общего с T-SQL но в нём используется = для присваивания
источник

АВ

Александр В... in Delphi & Lazarus
А мож просто чувак написал псевдокод в псевдопаскале-)))
источник
2020 September 11

СП

Сергей Пятыгин... in Delphi & Lazarus
Добрый день! Прошу помочь.
Имеется свойство массив Х с методом сет вида
procedure TSomeClass.SetX(j: integer; AValue: extended);
begin
 SetLength(FX, Length(FX) + 1);
 FX[j] := AValue;
end;
Есть функция Culc с результатом типа array of extended;
Как правильно скопировать массив из Culc в Х?
Копирование типа Х := Copy(Culc(), 0, Length(Culc)); выдает ошибку компилятора-неверное число параметров для сет.
Копирование типа
for j := 0 to N do
 X[j] := Culc()[j]; ошибки не выдает, но мне кажется что это грязно.
источник

Y

YuS in Delphi & Lazarus
Move
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Спасибо, но теперь ошибка в гет:
Move(Culc(), X, SizeOf(Culc()));
Error: Wrong number of parameters specified for call to "GetX"
Error: Found declaration: GetX(LongInt):Double;
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Мб я некорректно задаю свойство-динамический массив?
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
В документации к FPC указано что можно применять массив для свойства. Но нет примера для реализации гет и сет.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
источник

AS

Alexey Shumkin in Delphi & Lazarus
Сергей Пятыгин
Добрый день! Прошу помочь.
Имеется свойство массив Х с методом сет вида
procedure TSomeClass.SetX(j: integer; AValue: extended);
begin
 SetLength(FX, Length(FX) + 1);
 FX[j] := AValue;
end;
Есть функция Culc с результатом типа array of extended;
Как правильно скопировать массив из Culc в Х?
Копирование типа Х := Copy(Culc(), 0, Length(Culc)); выдает ошибку компилятора-неверное число параметров для сет.
Копирование типа
for j := 0 to N do
 X[j] := Culc()[j]; ошибки не выдает, но мне кажется что это грязно.
Странная функция setx. На самом деле, это Append.
Зачем там j - решительно непонятно, т.к. нет никакой зависимости между j и размером массива.
Я могу передать j больше, чем length(x), и код упадёт
источник

AS

Alexey Shumkin in Delphi & Lazarus
Сергей Пятыгин
Добрый день! Прошу помочь.
Имеется свойство массив Х с методом сет вида
procedure TSomeClass.SetX(j: integer; AValue: extended);
begin
 SetLength(FX, Length(FX) + 1);
 FX[j] := AValue;
end;
Есть функция Culc с результатом типа array of extended;
Как правильно скопировать массив из Culc в Х?
Копирование типа Х := Copy(Culc(), 0, Length(Culc)); выдает ошибку компилятора-неверное число параметров для сет.
Копирование типа
for j := 0 to N do
 X[j] := Culc()[j]; ошибки не выдает, но мне кажется что это грязно.
Вызывать функцию лучше только один раз. В твоём втором варианте, ты это делаешь для каждого присвоения - это очень неоптимально
Вызови раз, присвой результат временной переменной, и у уже её используй в цикле.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Сергей Пятыгин
Добрый день! Прошу помочь.
Имеется свойство массив Х с методом сет вида
procedure TSomeClass.SetX(j: integer; AValue: extended);
begin
 SetLength(FX, Length(FX) + 1);
 FX[j] := AValue;
end;
Есть функция Culc с результатом типа array of extended;
Как правильно скопировать массив из Culc в Х?
Копирование типа Х := Copy(Culc(), 0, Length(Culc)); выдает ошибку компилятора-неверное число параметров для сет.
Копирование типа
for j := 0 to N do
 X[j] := Culc()[j]; ошибки не выдает, но мне кажется что это грязно.
То, что грязно - так это потому, что функция вызывается каждый шаг цикла
А желаемое copy/move - это расчёт на внутреннее представление в памяти - это уже оптимизация. Но не надо делать преждевременных оптимизаций.
У тебя неоптимально в другом месте.

У тебя сам код error prone :)
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Alexey Shumkin
То, что грязно - так это потому, что функция вызывается каждый шаг цикла
А желаемое copy/move - это расчёт на внутреннее представление в памяти - это уже оптимизация. Но не надо делать преждевременных оптимизаций.
У тебя неоптимально в другом месте.

У тебя сам код error prone :)
Можете привести пример классической реализации свойства - типа динамический массив?
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Почему FPC не разрешает применение поля для свойства-динамический массив?
A read specifier for an array property is the name method function that has the same return type as the property type. The function must accept as a sole argument a variable of the same type as the index type. For an array property, one cannot specify fields as read specifiers.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Alexey Shumkin
Странная функция setx. На самом деле, это Append.
Зачем там j - решительно непонятно, т.к. нет никакой зависимости между j и размером массива.
Я могу передать j больше, чем length(x), и код упадёт
j-индекс, данная реализация приведена в FPC. Ну и гугл такие решения выдает :).
Type  
 TIntList = Class  
 Private  
   Function GetInt (I : Longint) : longint;  
   Procedure SetInt (I : Longint; Value : Longint;);  
 Public  
   Property Items [i : Longint] : Longint Read GetInt  
                                          Write SetInt;
источник

Y

YuS in Delphi & Lazarus
Сергей Пятыгин
Спасибо, но теперь ошибка в гет:
Move(Culc(), X, SizeOf(Culc()));
Error: Wrong number of parameters specified for call to "GetX"
Error: Found declaration: GetX(LongInt):Double;
По идее тебе неадо не в X копировать а в FX. Move(Culc(), FX, SizeOf(Culc()));
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Alexey Shumkin
Странная функция setx. На самом деле, это Append.
Зачем там j - решительно непонятно, т.к. нет никакой зависимости между j и размером массива.
Я могу передать j больше, чем length(x), и код упадёт
И все таки я не могу понять, как передать J напрямую, если это метод свойства?
источник