How to Pass a Function/Procedure to a Function/Procedure
Posted: Wed Jul 16, 2003 9:18 am
This is a rework of other stuff I have very gratefully found here in the forums but perhaps offers a different perspective, this is a key feature for reusability of code in my mind. I hope it helps someone. The code:
Another example of the usefulness of this type of code would be with a general purpose directory walker. Something Like:
Be kind I am just learning PB and I love it. 
Code: Select all
Global sReturn$
Global nReturn
Procedure Sum(ArgList$)
nReturn = 0
Arg = 1
Arg$ = StringField(Arglist$,Arg,",")
While Arg$ <> ""
nReturn = nReturn + Val(Arg$)
Arg + 1
Arg$ = StringField(Arglist$,Arg,",")
Wend
EndProcedure
Procedure Average(ArgList$)
nReturn = 0
Arg = 1
Arg$ = StringField(Arglist$,Arg,",")
While Arg$ <> ""
nReturn = nReturn + Val(Arg$)
Arg + 1
Arg$ = StringField(Arglist$,Arg,",")
Wend
nReturn / (Arg - 1)
EndProcedure
Procedure Concatenate(ArgList$)
sReturn$ = ""
Arg = 1
Arg$ = StringField(Arglist$,Arg,",")
While Arg$ <> ""
sReturn$ + Arg$
Arg + 1
Arg$ = StringField(Arglist$,Arg,",")
Wend
EndProcedure
Procedure ProcessArgList( ProcAddress, ArgList$ )
*ProcPointer = ProcAddress
CallFunctionFast(*ProcPointer, ArgList$)
EndProcedure
ProcessArgList( @Sum(), "1,2,3,4" )
Debug nReturn
ProcessArgList( @Average(), "4,6" )
Debug nReturn
ProcessArgList( @Concatenate(), "J,O,H,N, ,D,O,E" )
Debug sReturn$
Code: Select all
DirWalk(Root$,@FolderChangeFunc,@FileChangeFunc,@ProgressFunc)