[fpc-devel] Parameters must match exactly?

Graeme Geldenhuys graemeg.lists at gmail.com
Mon May 17 10:27:24 CEST 2010


Michael Van Canneyt het geskryf:
> 
> You only need var/out when you want to change the instance pointer, i.e. 
> switch to another instance. And I count FreeAndNil() among this. (.Free
> on the other hand is still possible, but not recommended).
> 
> If  you just want to set properties or call methods on an existing instance,
> there is no need to use out or var.


Thank you Michael, I understand it much better now. Could you please add
this information into the FPC Language Reference document? I re-read
Chapter 11 in ref.pdf and there is no mention of what you said, and the
documentation doesn't cover what happens if a Class is passed as a
parameter. It only mentions simple types and arrays as parameters. Maybe
adding a extra section in that chapter explaining when to use what?

This brings me to another question. What is supposed to happen if you pass
a Class instance as a const parameter? Does that even make sense? If not,
why does the compiler allow that? Again, the documentation doesn't cover
this scenario. Same question applies to passing a record structure.

eg:
----------------------------
procedure ProcessPerson(const APerson: TPerson);
begin
  ...  // Am I allowed to change APerson.Name property?
  ...  // Am I allowed to assign a new instance to APerson?
end;

...
  lPerson := TPerson.Create;
  lPerson.Name := 'Graeme Geldenhuys';
  ProcessPerson(lPerson);

----------------------------


* I see I can't assign a new instance to APerson - this makes sense.
* I can assign new values to APerson.Name - am I supposed to be
  allowed to do that?


Regards,
  - Graeme -

-- 
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://opensoft.homeip.net/fpgui/




More information about the fpc-devel mailing list