Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Parameter scoping behavior
Message
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 8 SP1
OS:
Windows 2000 SP4
Network:
Novell 6.x
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01061120
Message ID:
01061154
Views:
12
Hans,

The PROCEDURE/FUNCION in the routine declaration doesn't make any difference. The difference is in how the routine is called. SET UDFPARMS has effect only when a routine is called as a function. The DO command passes parameters by reference by default. To pass by value, enclose them in parenthesis.
* Call as a function, parameters are passed by falue with default SET UDFPARMS TO VALUE 
= foo (x)
* Call as a function, parameter is passed by reference
= foo (@x)
* Call as a program, parameter is passed by reference
DO foo WITH X
* Call as a program, parameter is passed by value
DO foo WITH (X)
>My co-worker created a local variable and passed it to a procedure. The procedure took the private parameter and changed it.
>
>I thought that the parameter should go out of scope when the procedure ends. However, the variable's value is changed in the calling program.
>
>UDFPARMS is set to the 'VALUE'.
>
>
>LOCAL X
>X = 1
>Y = 1
>DO foo WITH X
>? X,Y
>RETURN
>
>
>PROCEDURE foo
>PARAMETER X
>PRIVATE Y
>X=2
>Y=2
>RETURN
>
>
>OUTPUT: 2,1
>
>In this code, Y behaves normally. It value is set to 2 in foo, and reverts to 1 in the main program. X however, is changed to 2 even though its local in main.
>
>Is this expected bevavior?
>
>The workaround is easy... dont use the same name, and prefix params with tn.
>
>But the mystery remains.
>
>Hans
--sb--
Previous
Reply
Map
View

Click here to load this message in the networking platform