Форум: "Начинающим";
Текущий архив: 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.07 c