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
> 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
----------------------------------------------
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/
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.
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.
Jest to zdecydowanie ficzer (udokumentowany) kompilatora. Słusznie czy
niesłusznie, nie jest to bug.
--
Azarien
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
sprawdzi�em takie zachowanie by�o tylko gdy kod by� kompilowany ze zgodnoscia
dla Delphi . Przy wy��czeniu zgodno�ci kod si� nie kompilowa� i w ka�dym
miejscu gdzie by�o takie odwo�anie kompilator zg�asza� b��d .