![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
а ля Self внутри with do [D2005, 2003]
тщгыук © (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