Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

а ля Self внутри with do [D2005, 2003]


Страницы:   1 2

тщгыук ©   (2012-05-12 20:12:00) 

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

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


Anatoly Podgoretsky   (2012-05-13 22:41:00) [1]


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

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


тщгыук   (2012-05-13 22:22:00) [2]

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

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]> Прими как должное.
Угу.

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


Германн   (2012-05-13 21:06:00) [3]


> О, а как?

1. Add Watch
2. Evaluate/Modify


тщгыук   (2012-05-13 20:21:00) [4]


> 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 19:25:00) [5]


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

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


Inovet   (2012-05-13 18:46:00) [6]

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

И что


тщгыук   (2012-05-13 18:42:00) [7]

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

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


brother   (2012-05-13 18:01:00) [8]

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

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


Германн   (2012-05-13 17:23:00) [9]


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

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


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

Возможно, но я о таком:
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;


Palladin   (2012-05-13 16:13:00) [11]

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


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

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 не отображаются отладчиком?


Leonid Troyanovsky   (2012-05-13 07:38:00) [13]


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

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

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

--
Regards, LVT.


Leonid Troyanovsky   (2012-05-13 07:29:00) [14]


> 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.


Германн   (2012-05-12 22:02:00) [15]


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

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


Dimka Maslov   (2012-05-12 21:51:00) [16]


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


List.Add(TObject.Create)?


Германн   (2012-05-12 21:25:00) [17]


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

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


Dimka Maslov   (2012-05-12 21:19:00) [18]

Если очень хочется:
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 20:49:00) [19]

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

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

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


MBo   (2012-05-12 20:47:00) [20]

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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо