Форум: "Прочее";
Текущий архив: 2014.09.14;
Скачать: [xml.tar.bz2];
ВнизПользуетесь ли вы absolute? Найти похожие ветки
← →
Дмитрий СС (2014-01-26 19:45) [0]Например, чтобы обратиться к Result родительской функции?
function Foo: String;
var
Ret: String absolute Result;
function Bar:String;
begin
...
Ret := ...;
...
end;
begin
...
end;
Или может еще для чего либо?
← →
Юрий Зотов © (2014-01-26 20:00) [1]Иногда бывает удобно. Но не так, как в примере.
← →
Дмитрий СС (2014-01-26 20:04) [2]
> Юрий Зотов © (26.01.14 20:00) [1]
А можно ваш пример?
← →
RWolf © (2014-01-26 20:13) [3]разобрать Cardinal или Int64 на поля, скажем.
← →
Павиа (2014-01-26 20:19) [4]Не пользуюсь. Единственно для чего нужно это дря преобразования типа. Но предпочитаю делать это явно.
← →
Юрий Зотов © (2014-01-26 20:22) [5]> Дмитрий СС (26.01.14 20:04) [2]
Например, когда одни и те же данные надо трактовать по-разному.
var
Var1: TMyDataType1;
Var2: TMyDataType2 absolute Var1;
← →
antonn © (2014-01-26 20:27) [6]
> RWolf © (26.01.14 20:13) [3]
>
> разобрать Cardinal или Int64 на поля, скажем.
+1
← →
DevilDevil © (2014-01-26 20:51) [7]> Например, когда одни и те же данные надо трактовать по-разному.
+1
← →
Дмитрий СС (2014-01-27 04:05) [8]А как вам такой вариант?
procedure Button1Click(Sender: TObject);
var
Button: TButton absolute Sender;
begin
...
end;
?
← →
Inovet © (2014-01-27 04:10) [9]> [8] Дмитрий СС (27.01.14 04:05)
И какой в этом смысл?
← →
antonn © (2014-01-27 08:37) [10]а если там будет не Tbutton?
← →
DevilDevil © (2014-01-27 09:36) [11]> Дмитрий СС (27.01.14 04:05) [8]
правильно
← →
sniknik © (2014-01-27 10:02) [12]> И какой в этом смысл?
приведение типа не нужно каждый раз делать, если в обработке обращаешься к методам сендера, если это частое действие очень помогает. альтернатива with (им тоже можно убрать множественные приведения типа) более явная.
> а если там будет не Tbutton?
значит нужно что-то поменять... напримерprocedure НеБатон1Click(Sender: TObject);
var
НеБатон: TНеБатон absolute Sender;
НеНеБатон: TНеНеБатон absolute Sender;
begin
if Sender is TНеБатон then begin
НеБатон.xxxx
end;
if Sender is TНеНеБатон then begin
НеНеБатон.yyyy
end;
end;
← →
clickmaker © (2014-01-27 10:07) [13]> if Sender is TНеБатон then begin
> НеБатон.xxxx
> end;
я бы не советовал такой код писать в рамках коллективной или open-source разработки.
для себя любимого, сойдет, конечно
← →
Sha © (2014-01-27 10:10) [14]Почти всегда применение директивы absolute не является абсолютно необходимым.
Ее побочным эффектом является размещение обеих переменным в памяти.
Вот этим и пользуюсь )
← →
antonn © (2014-01-27 10:22) [15]
> значит нужно что-то поменять... например
ну, насколько я понял, в его коде был бы смысл в том, что не надо сначала переменную приводить, а пользоваться сразу Button. Впрочем по строчкам особого выигрыша нет :)
а вот когда нужно вытянуть word из 2-го + 3-го байта переменной dword - то удобно с абсолютом :)
← →
DVM © (2014-01-27 10:25) [16]
> Например, когда одни и те же данные надо трактовать по-разному.
Или воспользоваться вариантными Record-ами
← →
Sha © (2014-01-27 10:26) [17]> antonn © (27.01.14 10:22) [15]
> а вот когда нужно вытянуть word из 2-го + 3
w:=i shr 8 and $FFFF;
или
w:=pWord(pAnsiChar(@i)+1)^;
← →
sniknik © (2014-01-27 10:40) [18]> а пользоваться сразу Button.
а если их несколько? батонов, а обработчик один.
← →
Sha © (2014-01-27 11:00) [19]sniknik © (27.01.14 10:40) [18]
общую часть обработчиков вынести в процедуру,
а различающиеся части - в отдельные обработчики
← →
Inovet © (2014-01-27 11:02) [20]> [12] sniknik © (27.01.14 10:02)
> приведение типа не нужно каждый раз делать, если в обработке
> обращаешься к методам сендера, если это частое действие
> очень помогает. альтернатива with (им тоже можно убрать
> множественные приведения типа) более явная.
И более чреватая косяками.
← →
antonn © (2014-01-27 11:21) [21]
> Sha © (27.01.14 10:26) [17]
я вот даже не сомневался что вы напишите это даже не напрягаясь =) но речь же не об необходимости, а про удобство :) у меня девайс возвращает 6 байт, и по статусу их можно интерпретировать по-разному, удобно завести int64 и три record с absolute, и вытягивать нужные поля через них, к тому же даже наглядно в какой-то мере
> а если их несколько? батонов, а обработчик один.
там же абсолют к передаваемому параметру?..
← →
Германн © (2014-01-27 11:28) [22]
> удобно завести int64 и три record с absolute
А почему не один вариантный record?
← →
sniknik © (2014-01-27 11:34) [23]> И более чреватая косяками.
ну, не знаю... я вот чаще с with "косяки" ловлю, особенно в вложенными друг в друга, а таких конструкций практически не встречаю... как знать, что было бы, если бы использовали равновероятно (было бы примерно равно и так и так)...
← →
antonn © (2014-01-27 13:42) [24]
> А почему не один вариантный record?
у разных можно назвать поля более человечными именами, и там то byte+word+byte, то word+reserved byte+word
да и в графике вместо пикселя record на 4 байта, считывая dword из массива через абсолют имею, по сути, 4 переменных "в одном месте" рекорда, путаницы меньше, как мне кажется красивше код.
← →
antonn © (2014-01-27 13:43) [25]
> А почему не один вариантный record?
аа, понял. как то не привык их использовать :)
← →
Eraser © (2014-01-27 14:39) [26]
> Дмитрий СС (26.01.14 19:45)
как-то исторически сложилось, что использую исключительно в с связке с OVERLAPED структурой ) хотя, по хорошему, надо уходить от этих анахронизмов.
← →
bems © (2014-01-27 20:55) [27]пользуюсь в качестве приведения типа, когда приводить нужно много раз
да, по типу этого
> procedure НеБатон1Click(Sender: TObject);
> var
> НеБатон: TНеБатон absolute Sender;
> НеНеБатон: TНеНеБатон absolute Sender;
> begin
> if Sender is TНеБатон then begin
> НеБатон.xxxx
> end;
>
> if Sender is TНеНеБатон then begin
> НеНеБатон.yyyy
> end;
> end;
← →
Palladin © (2014-01-27 21:52) [28]не использую и другим не советую
← →
Inovet © (2014-01-27 21:59) [29]> [27] bems © (27.01.14 20:55)
> пользуюсь в качестве приведения типа, когда приводить нужно
> много раз да, по типу этого
Почему явно не привести с присвоением в отдельный указатель? Экономия 4 (8) байт на стеке?
← →
DevilDevil © (2014-01-27 22:35) [30]> Почему явно не привести с присвоением в отдельный указатель?
> Экономия 4 (8) байт на стеке?
Может потому, что в обычных обработчиках удобство ценнее?
← →
ё (2014-01-27 23:23) [31]
> > И какой в этом смысл?приведение типа не нужно каждый раз
> делать, если в обработке обращаешься к методам сендера,
> если это частое действие очень помогает. альтернатива with
> (им тоже можно убрать множественные приведения типа) более
> явная.
хм, я давно уже на делфи не пишу, но разве
var
button : TButton;
...
button := Sender as Tbutton;
не ровно тоже самое делает?
← →
DevilDevil © (2014-01-27 23:36) [32]> ё (27.01.14 23:23) [31]
нет
в приведённом тобой коде вызывает TObject.InheritsFrom()
← →
ё (2014-01-27 23:48) [33]
> в приведённом тобой коде вызывает TObject.InheritsFrom()
и?
развивай мысль
← →
DevilDevil © (2014-01-28 00:49) [34]obsolute не делает TObject.InheritsFrom()
← →
Дмитрий Белькевич (2014-01-28 01:24) [35]
procedure ParseFloat64(Stream: TStream; var Value: double; ByteOrder: TDICOMByteOrder);
var
Swapper: int64 absolute Value;
begin
Stream.Read(Value, 8);
if ByteOrder = boBIGENDIAN then
Swapper := InverseByteOrder(Swapper);
end;
function InverseByteOrder(i: int64): int64;
asm
mov eax, dword ptr i[4]
mov edx, dword ptr i
bswap eax
bswap edx
end;
← →
DevilDevil © (2014-01-28 01:53) [36]> Дмитрий Белькевич (28.01.14 01:24) [35]
передавай по указателю/ссылке - так быстрее :)
← →
ё (2014-01-28 02:52) [37]
> obsolute не делает TObject.InheritsFrom()
и?
ты что сказать то хотел?
это плохо?
ты странный человек
← →
asail © (2014-01-28 03:28) [38]
> ё (27.01.14 23:23) [31]
> button := Sender as Tbutton;
> не ровно тоже самое делает?
Тады уж скорее
button := Tbutton(Sender)
← →
ё (2014-01-28 03:49) [39]
> Тады уж скорее button := Tbutton(Sender)
неа
насколько помню, "as" может кинуть ексепшен
ваш вариант же в этом случае приведет к АВ
← →
ё (2014-01-28 04:11) [40]соврал
точнее не знал
procedure TForm5.Button1Click(Sender: TObject);
begin
Sender := nil;
TButton(sender).Font.Color := clRed;
end;
procedure TForm5.Button2Click(Sender: TObject);
var
b : TButton;
begin
Sender := nil;
b := Sender as TButton;
b.Font.Color := clRed;
end;
одинаково ведут
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2014.09.14;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.003 c