Page 1 of 1
Optional Arguments
Posted: Tue Apr 28, 2015 11:27 pm
by Phantomas
Example of Procedure with some Optional Arguments:
Code: Select all
Procedure.i proc(one.i, two.i = 1337, three.i = 1337)
Debug one
Debug two
Debug three
EndProcedure
What if I want call this procedure with declare only first (one) and third (three, optional) arguments? I do not want declare second (two, optional) parameter and want keep it default (1337).
In PAWN I can do that:
"_" means "skip it" and this argument will be equal 1337.
In PureBasic I can not do that:
I
should enter second parameter and can not skip it.
Re: Optional Arguments
Posted: Wed Apr 29, 2015 12:48 am
by Tenaja
No, but if you hardcode the default value in the definition, you can hardcode the value in the call. (Best with a pre-defined #Constant.)
Re: Optional Arguments
Posted: Wed Apr 29, 2015 5:46 am
by Little John
When using
named parameters for a procedure, the order of the parameters doesn't matter, and thus handling of optional parameters is very flexible. It can be implemented e.g.
this way (at the expense of speed).
Re: Optional Arguments
Posted: Wed Apr 29, 2015 6:48 am
by Josh
Phantomas wrote:"_" means "skip it" and this argument will be equal 1337.
Think is a useful feature and not hard to implement in PB
+1
Re: Optional Arguments
Posted: Wed Apr 29, 2015 9:26 am
by c4s
+1 for any kind of implementation.
But how about just keeping the desired optional argument empty (instead of using "_") as requested and discussed e.g. here:
Procedures - optional parameter more flexible?! That would probably be even easier and more reasonable to implement because "_" is a valid variable name.
Re: Optional Arguments
Posted: Fri May 01, 2015 11:22 am
by Trond
If the optional parameter can't have the value -1, it can be coded like this:
Code: Select all
#_ = -1
Procedure.i proc(one.i, two.i = 1337, three.i = 1337)
If two = #_
two = 1337
EndIf
Debug one
Debug two
Debug three
EndProcedure
proc(0, #_, 1338)
Re: Optional Arguments
Posted: Thu Jul 09, 2015 3:02 pm
by Fred
Yes, in PB we often use this as well trough the #PB_Ignore or #PB_Default constant.