Вниз
Скачать: CL | DM;

а ля Self внутри with do   Найти похожие ветки 

← →
тщгыук   (2012-05-12 20:12) [0]

А можно ли в конструкции
with TObject.Create do begin
end;

как-то сослаться на результат вызова TObject.Create


← →
Германн ©   (2012-05-12 20:19) [1]

А зачем?


← →
brother ©   (2012-05-12 20:21) [2]

вообще эта конструкция подразумевает в бегин енд - TObject.


← →
MBo ©   (2012-05-12 20:47) [3]

Вообще-то " или крест снимите, или трусы наденьте"

Однако трюк существует:
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=831


← →
Юрий Зотов ©   (2012-05-12 20:49) [4]

Когда-то встречал в Сети, где автор получал такую ссылку разными хитрыми манипуляциями. Почитать было интересно, но главного я так и не понял:

- зачем это надо, когда можно ввести обыкновенную переменную;

- зачем нужен код, объем которого наверняка больше размера этой переменной и который еще и требует какого-то времени на свое выполнение.


← →
Dimka Maslov ©   (2012-05-12 21:19) [5]

Если очень хочется:
type
 TObjectX = class (TObject)
 public
   function GetSelf: TObject;
 end;

 function TObjectX.GetSelf: TObject;
 asm
 end;

 with TObjectX.Create do begin
   GetSelf;
 end;


← →
Германн ©   (2012-05-12 21:25) [6]


> Юрий Зотов ©   (12.05.12 20:49) [4]
>
> - зачем это надо, когда можно ввести обыкновенную переменную;

 Ну например чтобы избавиться от лишней переменной. Создал объект и тут же поместил его в список. Переменная получается лишняя.


← →
Dimka Maslov ©   (2012-05-12 21:51) [7]


> Создал объект и тут же поместил его в список


List.Add(TObject.Create)?


← →
Германн ©   (2012-05-12 22:02) [8]


> Dimka Maslov ©   (12.05.12 21:51) [7]

Если точнее то:
with TMyObj(MyList.Items[MyList.Add(TMyObj.Create)]) do


← →
Leonid Troyanovsky ©   (2012-05-13 07:29) [9]


> Dimka Maslov ©   (12.05.12 21:19) [5]

>    function GetSelf: TObject;

Если уж Self, то function GetSelf: TObjectX

http://groups.google.com/group/fido7.ru.delphi.chainik/msg/f18b9a7b2b464a60

--
Regards, LVT.


← →
Leonid Troyanovsky ©   (2012-05-13 07:38) [10]


> MBo ©   (12.05.12 20:47) [3]

> Однако трюк существует:

http://groups.google.com/group/fido7.ru.delphi.chainik/msg/30a14953b6ea41a3

--
Regards, LVT.


← →
тщгыук   (2012-05-13 12:12) [11]

MBo © , Leonid Troyanovsky © , спасибо за интересные ссылки.

> Юрий Зотов ©   (12.05.12 20:49) [4]
> - зачем нужен код, объем которого наверняка больше размера
>   этой переменной и который еще и требует какого-то времени
>   на свое выполнение.
Это да.

А если через новые helper:
TTObjectHelper = class helper for TObject
public function Self_:TObject; inline;
end;

function TTObjectHelper.Self_:TObject;
begin
Result:=Self;
end;


Кстати, а почему при отладке поля внутри with не отображаются отладчиком?


← →
Palladin ©   (2012-05-13 16:13) [12]

Потому что это не локальные переменные.


← →
тщгыук   (2012-05-13 17:16) [13]

Возможно, но я о таком:
procedure Test;
var
D: record a,b,c,n: Cardinal; end;
begin
 with D do begin    // тут над D всплывает подсказка о ее содержимом
   a := 0;          // \
   b := 0;          //  а тут нет  // почему?
   c := a+b;        // /
 end;
 D.n := 0;          // тут над D.n тоже всплывает подсказка о ее значении
end;


← →
Германн ©   (2012-05-13 17:23) [14]


> а тут нет  // почему?

Потому что потому. Прими как должное.


← →
brother ©   (2012-05-13 18:01) [15]

> b := 0;          //  а тут нет  // почему?

а по твоему, это что?


← →
тщгыук   (2012-05-13 18:42) [16]

Ну, присваивание, а если его куда-то в процедуру передавать,
а оно поле только что созданного (в with) объекта и зависит
от параметров создания. Вот хотелось значение и подсмотреть.

Но коль нет, так нет, - подождем ХеФрии


← →
Inovet ©   (2012-05-13 18:46) [17]

> [16] тщгыук   (13.05.12 18:42)
> а если его куда-то в процедуру передавать

И что


← →
Германн ©   (2012-05-13 19:25) [18]


> Вот хотелось значение и подсмотреть

Помимо всплывающей подсказки есть ещё два способа подсмотреть.


← →
тщгыук   (2012-05-13 20:21) [19]


> Inovet ©   (13.05.12 18:46) [17]
> > а если его куда-то в процедуру передавать
> И что

Я подумал, что > brother ©   (13.05.12 18:01) [15] указывает на то, что после b := 0;  содержимое уже известно.

> Германн ©   (13.05.12 19:25) [18]
> Помимо всплывающей подсказки есть ещё два способа подсмотреть.

О, а как?


← →
Германн ©   (2012-05-13 21:06) [20]


> О, а как?

1. Add Watch
2. Evaluate/Modify


← →
тщгыук   (2012-05-13 22:22) [21]

Применительно к

type Tc = class
 fA : Real;
 fB : Real;
 constructor Create;
end;

constructor Tc.Create;
begin
 fA := Random;
end;

procedure TestC;
begin
 with Tc.Create do begin
   fB := fA;                 // Точка останова -> "Ctrl+F5", "Ctrl+F7" ->
                             // значение fA,fB в отладчике так увидеть и не получилось
   Free;
 end;
end;


> Германн ©   (13.05.12 17:23) [14]> Прими как должное.
Угу.

Благодарю мастеров за отклик!


← →
Anatoly Podgoretsky ©   (2012-05-13 22:41) [22]


> Юрий Зотов ©   (12.05.12 20:49) [4]

Так проигрыша и нет, вероятно временная переменная заведена компилятором.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.064 c
4-1256124076
istok
2009-10-21 15:21
2013.03.22
WM_ENDSESSION и Win7


3-1277448717
pavel_guzhanov
2010-06-25 10:51
2013.03.22
Можно ли сравнить два набора данных?


3-1282803008
Nurjanov
2010-08-26 10:10
2013.03.22
[Error] Need imported data reference ($G) to access GUID_NULL f


15-1336060294
CRLF
2012-05-03 19:51
2013.03.22
Вспомнилось...


2-1336248923
rodionov-uv
2012-05-06 00:15
2013.03.22
Документ Word и Delphi




   Наверх