• dmk © (22.01.18 21:16) [0]
    Всем привет! Есть код с конструкцией 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]" особо сложным не вижу.
Есть новые Нет новых   [118580   +26][b:0][p:0.001]