-
Всем привет! Есть код с конструкцией with. Несмотря на удобство with в некоторых случаях приходится даже внутри обращаться к полной конструкции. Может есть другой способ? Вроде self?for k := 0 to N do
begin
i := InterlockedIncrement(gObjectIndex) - 1;
if (i > N) then Break;
with ZStars[i] do
begin
InitModelMatrix;
TranslateMatrix(Vec3s(0, 0, -Speed, 0.0), True);
if (i mod 3) = 0 then RotateMatrix(0, 0, AngleSpeed, true) else
if (i mod 2) = 0 then RotateMatrix(0, AngleSpeed, 0, true) else
RotateMatrix(AngleSpeed, 0, 0, true);
MVP^ := MulMatrixRevC(ModelMatrix^, ZCam.ViewMatrix^);
DrawObject;
if (Pos.Z < -Depth) then
begin
GenerateStar(ZStars[i], False); <- Здесь опять обращаемся к массиву
end;//if
end;//with
end;//for -
Германн © (23.01.18 01:48) [1]Не путайте, пожалуйста горячее с солёным. with и self это совсем (ну почти совсем) из разных областей.
А в вашем случае никакого иного решения, кроме явного указания ZStars[i] в параметре процедуры GenerateStar нет. -
KilkennyCat © (23.01.18 08:56) [2]
> Несмотря на удобство with в некоторых случаях приходится
> даже внутри обращаться к полной конструкции
в некоторых случаях with применяется не ради удобного обращения к неполной конструкции. -
Dimka Maslov © (23.01.18 11:10) [3]1) zStar := ZStars[i]
2) в классе TStar(?) объяви
function ThisStar: TStar;
begin
Results := Self;
end;
3) вызывай
GenerateStar(zStar, False)
или
GenerateStar(ThisStar, False) -
Z (27.01.18 18:33) [4]А как вы хотели? "ZStars[i]" не является полем/методом "ZStars[i]". Да и один раз написать "ZStars[i]" особо сложным не вижу.