>Try the following:
>
>PUBLIC aPubArray[2,3]
>aPubArray = 'Foo'
>PRIVATE aPrivArray[2,3]
The previous statement only hides any aPrivArray variable from a higher level. PRIVATE doesn't allocate the array and, after the above statement, the aPrivArray doesn't exist yet.
>aPrivArray = 'Bar'
Now, aPrivArray becomes a char string variable, not array.
>? DEMOARRAYERROR(@aPrivArray) && OK
>? DEMOARRAYERROR(@aPubArray) && meltdown
>
>FUNCTION DEMOARRAYERROR
>LPARAMETER aRefArray
>DIMENSION aRefArray[4,2]
Being a test program, it's not correct to reDIMENSION the parameter. This will make it to be array anyway! And this is what changes the results of your test.
Try the following:
PUBLIC aPubArray[2,3]
aPubArray = 'Foo'
PRIVATE aPrivArray
DIMENSION aPrivArray[2,3]
aPrivArray = 'Bar'
?"Call with private array:"
= DEMOARRAYERROR(@aPrivArray) && OK
?"Call with public array:"
= DEMOARRAYERROR(@aPubArray) && meltdown
FUNCTION DEMOARRAYERROR
PARAMETER aRefArray
?"Array length:", alen(aRefArray)
? aRefArray[1,1]
RETURN
This works just fine, with both PRIVATE and PUBLIC arrays.
Vlad
Previous
Next
Reply
View the map of this thread
View the map of this thread starting from this message only
View all messages of this thread
View all messages of this thread starting from this message only