>I know weak typing has been a useful feature in FoxPro, but sometimes I want to enforce strong typing. But according to the following code, that's not possible!
>
>
>?squareit("5")
>
>
>FUNCTION squareit
> LPARAMETERS x as Double
>
> ?"have we encountered a problem yet?"
>
> RETURN x * x
>ENDFUNC
>
>
>My initial thought was I should get an error on the call to squareit(), since I am passing a character type when it expects a double. But the error doesn't happen until I perform the calculation. This isn't right! If the caller screws up the function call, I want the error to originate there, not buried in the well-debugged function!
>
>I haven't noticed this before because I assummmed FoxPro was enforcing my explicit type. Am I doing something wrong, or is this just one of FoxPro's quirks?
>
>Using VFP 9, no service pack...
>
>Brian Vander Plaats
>
>Brian
This is by design.
It is not possible to declare the type for a variable,
or to prevent that a variable changes type.
If you want to check the type you have to expressly do it:
?squareit("5")
FUNCTION squareit
LPARAMETERS x as Double
IF NOT VARTYPE(m.x)=="N"
ERROR "have we encountered a problem yet?"
RETURN NULL
ENDIF
RETURN x * x
ENDFUNC