Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

а ля 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 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.058 c
2-1346933403
Артём
2012-09-06 16:10
2013.03.22
Как щелкнуть по кнопку на сайте?


15-1352291019
Inovet
2012-11-07 16:23
2013.03.22
Скончаося Кругляков Эдуард Павлович


15-1347627388
Roman_man
2012-09-14 16:56
2013.03.22
Could not create output file


15-1329078602
Юрий
2012-02-13 00:30
2013.03.22
С днем рождения ! 13 февраля 2012 понедельник


15-1353409433
alexdn
2012-11-20 15:03
2013.03.22
Ит проект





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский