varargs best practice?

Jan Schenkel janschenkel at yahoo.com
Tue Dec 7 03:00:42 EST 2010


--- On Mon, 12/6/10, Mark Wieder <mwieder at ahsoftware.net> wrote:
> All-
> 
> Does anyone have ideas on a best practice for handling
> variable
> numbers of parameters (as in C varargs)? I have two
> functions and I'd
> like to pass a variable number of parameters (probably no
> more than
> six) to the first function and have it hand them off to the
> second:
> 
> function getString pVerb, pArgs -- pArgs may be many
> parameters
>   return doCommand(pVerb, pArgs)
> end getString
> 
> function doCommand pVerb, pArgs
>   -- do something with parameters
>   -- return something
> end doCommand
> 
> The problem is that only the first argument gets passed to
> the
> doCommand function. If I iterate through the parameters to
> getString
> using paramCount and param(x) then the result gets packaged
> up in
> quotes when it gets handed to doCommand and it becomes one
> parameter.
> 
> I'm about to do something really ugly with the code and
> hoping that
> someone has been through this already and has a nifty way
> of dealing
> with this situation.
> 
> -- 
> -Mark Wieder
>  mwieder at ahsoftware.net
> 

Why not repackage the additional params as an array, and pass that on to the 'doCommand' handler? The 'doCommand' handler can then check if the second parameter is an array, and if not, check the paramCount for those cases where it is called directly, rather than through the 'getString' function.

Of course, you can always collect the parameters and build a 'do' instruction; I just dropped a button onto a stack and gave it this script:
##
on mouseUp
   answer getString("alpha","beta","gamma")
end mouseUp

function getString pVerb
   local tToDo, tParamIndex
   put "return doCommand(pVerb" into tToDo
   repeat with tParamIndex = 2 to the paramCount
      put ",param(" & tParamIndex & ")" after tToDo
   end repeat
   put ")" after tToDo
   do tToDo
end getString

function doCommand pVerb
   local tOutput, tParamIndex
   put "Hello from doCommand" & return & \
          "Verb: " & pVerb & return & \
          "Params: "into tOutput
   repeat with tParamIndex = 2 to the paramCount
      put param(tParamIndex) & "," after tOutput
   end repeat
   delete char -1 of tOutput
   return tOutput
end doCommand
##

Clicking the button produced an answer box with the text:
##
Hello from doCommand
Verb: alpha
Params: beta,gamma
##
So I guess it works :-)

HTH,

Jan Schenkel.
=====
Quartam Reports & PDF Library for LiveCode
www.quartam.com

=====
"As we grow older, we grow both wiser and more foolish at the same time."  (La Rochefoucauld)



      




More information about the use-livecode mailing list