On Mon, 03 May 2010 19:15:57 +0100 Martin <f...@mfriebe.de> wrote: > On 03/05/2010 10:58, spir ☣ wrote: > > Hello, > > > > A few questions on the topic: > > > > * Is it possible to define an optional parameter without default value? > > > > * Is it at all possible for an optional *argument* not to be the last in > > actual call? Eg > > procedure p(a:Integer=0 ; b:Integer=0) > > How can the caller pass b and not a? > > > > * The ref states: "For dynamic arrays or other types that can be considered > > as equivalent to a pointer, the only possible default value is Nil." > > Does this apply to any non-atomic type? Which are the "other types that can > > be considered as equivalent to a pointer"? > > Tried with a record, but cannot make it be accepted by the compiler. Needed > > to change the parameter to be a pointer to the record instead (so the > > default can be nil), but this creates a trap for the calling code. > > Else, is there a common trick or workaround? > > > > Maybe you want to use overloading instead of optioanl parameters? > > Procedure Foo; overload; // no params > Procedure Foo(SomeRecord: TRecordType); overload; // no params > > then of course you need to implement twice > > Procedure Foo; > var a: TRecordType; > begin > a:= xxx;/your defaults > Foo(a); > end; > > Procedure Foo(SomeRecord: TRecordType); > begin > / do work > end;
Right, thank you, did not know "overload". This seems to be a good solution. Denis ________________________________ vit esse estrany ☣ spir.wikidot.com _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal