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;
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal