Как говорит dummzeuch, вы можете написать свою собственную процедуру. Однако я бы предпочел вариант с подписью типа: procedure AssignIntegers(AValue, ATargetArray);. И в идеале вызовите процедуру с помощью: AssignInteger(99, [X, Y, Z]);.
К сожалению, идеальный вариант не работает, но следующая процедура достаточно близка и должна быть достаточной. Он работает, беря указатели на целые числа, которые необходимо присвоить.
procedure AssignIntegers(AValue: Integer; const ATargets: array of PInteger);
var
I: Integer;
begin
for I := Low(ATargets) to High(ATargets) do
ATargets[I]^ := AValue;
end;
Следующий тестовый пример DUnit демонстрирует, что он работает. Вы даже можете держать под рукой массив этих целочисленных указателей, чтобы переназначить их в любое время.
type
TArrayPInteger = array of PInteger;
procedure TDelphiTests.TestAssignIntegers;
var
X,Y,Z: Integer;
LGroup: TArrayPInteger;
begin
AssignIntegers(1, [@X, @Y, @Z]); { Pass open arrray using addresses of integers to initialise }
CheckEquals(1, X);
CheckEquals(1, Y);
CheckEquals(1, Z);
LGroup := TArrayPInteger.Create(@X, @Y); { Handy technique to initialise dynamic arrays }
AssignIntegers(2, LGroup);
CheckEquals(2, X);
CheckEquals(2, Y);
CheckEquals(1, Z); { Not part of group }
end;
ПРЕДУПРЕЖДЕНИЕ
Единственным реальным недостатком является то, что вы теряете проверку типов. Компилятор не помешает вам передать адрес нецелочисленных типов. Это может привести к повреждению данных других структур или нарушению прав доступа.
person
Disillusioned
schedule
29.04.2014
X: Integer = 99; Y: Integer = 99;в одной строке, а не в нескольких операторах присваивания. - person TLama   schedule 27.04.2014x=y=z=0, мне довольно трудно читать. Лично я бы написал даже это в несколько строк. - person TLama   schedule 27.04.2014yиzпри чтении, я не знаю. А насчет временных переменных, что с ними не так? Я скорее буду четко видеть написанное, чем бояться лишнего задания. Кроме того, в сгенерированном ассемблерном коде будет то же самое. Или вы думаете, что есть одна инструкция, которая будет присваивать возвращаемое значение функции сразу трем переменным? - person TLama   schedule 28.04.2014x := y := z := 0не имеет никакого смысла. Вы можете назначать константы массива переменным, но не литералы массива. В Delphi нет (и не должно быть) всех мыслимых возможностей, как и в других языках. - person Rudy Velthuis   schedule 28.04.2014Swap(a, b)намного понятнее, чемa, b = b, a. - person Disillusioned   schedule 29.04.2014TIntegerArray.Create(1, 2, 3);. См. (stackoverflow.com/a/23361469/224704) пример. Я не знаю, когда эта функция была введена. Я узнал об этом совсем недавно. ... Дело в том, что у языков есть разные способы достижения определенной эффективности. Вместо того, чтобы пытаться встроить в язык другие функции (создавая больше способов решения одной и той же проблемы), иногда лучше узнать о различиях между языками. (Но это ни в коем случае не должно быть поводом для застоя.) - person Disillusioned   schedule 29.04.2014