Thread View: pl.comp.lang.pascal
7 messages
7 total messages
Started by webmajsterek
Thu, 14 Oct 2010 10:02
Property -- podwujna składnia
Author: webmajsterek
Date: Thu, 14 Oct 2010 10:02
Date: Thu, 14 Oct 2010 10:02
34 lines
1588 bytes
1588 bytes
taki kodzik
Type PCell=^TCell;
TCell=Record
x,y,value:Integer;
end;
Type TMyClass=class
private
fArea:Array of Array of PCell;
public
property Items[x,y:Iteger]:PCell Read Get;Default;
end;
var MyClass:TMyClass;
teraz jak w kodzie odwolam
MyClass[1,1].x=10; // poprawnie
lub
MyClass[1,1]^.x:=10; // tez kompilator akceptuje ;
ale jak zrobie
with MyClass[1,1]^ do begin // tylko taka forme akceptuje kompilator
x:=10;
end;
ktoś potrafi to wytłumaczyć dlaczego tak się dzieje ??
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Property -- podwujna składnia
Author: Grzegorz Skoczylas
Date: Thu, 14 Oct 2010 10:52
Date: Thu, 14 Oct 2010 10:52
20 lines
1649 bytes
1649 bytes
W dniu 2010-10-14 12:02, webmajsterek@poczta.onet.pl pisze: > teraz jak w kodzie odwolam > MyClass[1,1].x=10; // poprawnie Zgodnie z definicją języka taki zapis (bez „^”) nie jest poprawny. Kompilator go akceptuje, ale tylko w niektórych kontekstach. Wydaje mi się, że jest to albo błąd w analizatorze składni (powodujący jednak poprawne kompilowanie kodu), albo próba „poprawienia” pomyłek programistów. Uważam, że nie należy tak kodować. -- Pozdrawiam, Grzegorz Skoczylas http://gskoczylas.rekord.pl ----------------------------------------------
Re: Property -- podwujna składnia
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 14 Oct 2010 12:30
Date: Thu, 14 Oct 2010 12:30
38 lines
1924 bytes
1924 bytes
On Thu, 14 Oct 2010 12:02:36 +0200, webmajsterek@poczta.onet.pl wrote: > Type PCell=^TCell; > TCell=Record > x,y,value:Integer; > end; > > <snip> > > var MyClass:TMyClass; > > MyClass[1,1].x=10; // poprawnie > MyClass[1,1]^.x:=10; // tez kompilator akceptuje ; > > ale jak zrobie > > with MyClass[1,1]^ do begin // tylko taka forme akceptuje kompilator > x:=10; > end; > > ktoś potrafi to wytłumaczyć dlaczego tak się dzieje ?? Albo jakiś syntactic sugar w fpc, albo błąd w analizatorze który traktuje jakby ^TCell był równoważny class[w uproszczeniu ^object, więc w uproszczeniu jest ;-)] i poprawia . na dereference i member access operator z automatu w AST, bo takie ma "ukryte" znaczenie member access operator dla class. A przy with nie ma explicite member access operatora i pewnie dlatego się kompilator gubi. To drugie to domysł, nie kojarzę żeby był taki cukier składniowy w fpc kiedykolwiek ;-), więc zakładam że to bug jakiś. -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/
Re: Property -- podwujna składnia
Author: Grzegorz Skoczylas
Date: Thu, 14 Oct 2010 13:14
Date: Thu, 14 Oct 2010 13:14
47 lines
2492 bytes
2492 bytes
W dniu 2010-10-14 14:30, Łukasz 'Maly' Ostrowski pisze: > On Thu, 14 Oct 2010 12:02:36 +0200, webmajsterek@poczta.onet.pl wrote: >> Type PCell=^TCell; >> TCell=Record >> x,y,value:Integer; >> end; >> >> <snip> >> >> var MyClass:TMyClass; >> >> MyClass[1,1].x=10; // poprawnie >> MyClass[1,1]^.x:=10; // tez kompilator akceptuje ; >> >> ale jak zrobie >> >> with MyClass[1,1]^ do begin // tylko taka forme akceptuje kompilator >> x:=10; >> end; >> >> ktoś potrafi to wytłumaczyć dlaczego tak się dzieje ?? > > Albo jakiś syntactic sugar w fpc, albo błąd w analizatorze > który traktuje jakby ^TCell był równoważny class[w > uproszczeniu ^object, więc w uproszczeniu jest ;-)] > i poprawia . na dereference i member access operator z > automatu w AST, bo takie ma "ukryte" znaczenie member > access operator dla class. > > A przy with nie ma explicite member access > operatora i pewnie dlatego się kompilator gubi. Też sądzę, że mniej więcej o to chodzi. > To drugie to domysł, nie kojarzę żeby był taki cukier > składniowy w fpc kiedykolwiek ;-), więc zakładam > że to bug jakiś. Podejrzewam, że zostało to zaimplementowane dla zgodności z Delphi, gdzie też to działa podobnie. -- Pozdrawiam, Grzegorz Skoczylas http://gskoczylas.rekord.pl ----------------------------------------------
Re: Property -- podwujna składnia
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 14 Oct 2010 13:25
Date: Thu, 14 Oct 2010 13:25
12 lines
1377 bytes
1377 bytes
On Thu, 14 Oct 2010 15:14:12 +0200, Grzegorz Skoczylas wrote: > Podejrzewam, że zostało to zaimplementowane dla zgodności z Delphi, > gdzie też to działa podobnie. Jeżeli w dialekcie Delphi Object Pascala tak się to zachowuje, to mamy bezpośredni powód dla którego w FPC tak jest. Od początku twierdzili że chcą trzymać kompatybilność z Delphi i cross-kompilowalność źródeł z D. -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/
Re: Property -- podwujna składnia
Author: Wiktor S.
Date: Thu, 14 Oct 2010 19:39
Date: Thu, 14 Oct 2010 19:39
14 lines
1391 bytes
1391 bytes
Grzegorz Skoczylas wrote: > W dniu 2010-10-14 12:02, webmajsterek@poczta.onet.pl pisze: > >> teraz jak w kodzie odwolam >> MyClass[1,1].x=10; // poprawnie > > Zgodnie z definicją języka taki zapis (bez „^”) nie jest poprawny. > Kompilator go akceptuje, ale tylko w niektórych kontekstach. Jest to zdecydowanie ficzer (udokumentowany) kompilatora. Słusznie czy niesłusznie, nie jest to bug. -- Azarien
Re: Property -- podwujna składnia
Author: Wiktor S.
Date: Thu, 14 Oct 2010 19:41
Date: Thu, 14 Oct 2010 19:41
11 lines
1277 bytes
1277 bytes
> To drugie to domysł, nie kojarzę żeby był taki cukier
> składniowy w fpc kiedykolwiek ;-), więc zakładam
> że to bug jakiś.
Jest taki w Delphi. Nie jest to bug.
FPC pozwala na to w trybie delphi {$MODE DELPHI}. W trybie "własnym" {$MODE
OBJFPC} to nie przejdzie.
--
Azarien
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads