Difference between revisions of "Error Messages/40616"
(→Remedies: show workaround) |
m (→Cause) |
||
Line 7: | Line 7: | ||
You are trying to assign a value to a slice (subscripted element) of a global variable. This is not permitted, since it would contravene Analytica's general principle of ''no side-effects''. You may assign to a slice of a local variable. | You are trying to assign a value to a slice (subscripted element) of a global variable. This is not permitted, since it would contravene Analytica's general principle of ''no side-effects''. You may assign to a slice of a local variable. | ||
− | This example triggers this error. Here | + | This example triggers this error. Here BadDef tries to assign to a slice of the global variable X: |
+ | <code>Index I := 1..9 | ||
− | + | Variable X := Table(I)(7, 8, 3, 2, 5, 4, 9, 1, 5) | |
− | |||
− | + | Variable BadDef := X[I = 5] := 6 | |
− | + | </code> | |
− | |||
− | |||
− | |||
= Remedies = | = Remedies = |
Revision as of 02:33, 17 August 2011
Error Message Examples
You cannot assign to a slice or subscript of a global variable object.
Cause
You are trying to assign a value to a slice (subscripted element) of a global variable. This is not permitted, since it would contravene Analytica's general principle of no side-effects. You may assign to a slice of a local variable.
This example triggers this error. Here BadDef tries to assign to a slice of the global variable X:
Index I := 1..9
Variable X := Table(I)(7, 8, 3, 2, 5, 4, 9, 1, 5)
Variable BadDef := X[I = 5] := 6
Remedies
You may assign to a global variable in a Button script or in a Function called from a Button script Scripts and Buttons, directly or indirectly. The rationale is that this does not violate the No-side effects principle because clicking a button means the user is causing the effect directly.
You can often work around this issue by copying the global array into a local, assigning to a slice of the array, and then assigning the local back to the global within a function called from a Button script. For example, suppose you want to assign 999 to the 10th element over I of global variable X. If you define a variable
Variable TrytoAssignX := X[I=10] := 999
it will give the error above. So instead define
Function AssigntoX(v) Definition: Variable local_X:= X; local_X[i=10] := v; X := local_X Button Assign_to_X Script: Assign_to_X(999)
When you press the button, it will call Assign_to_X(999) and make the assignment.
Enable comment auto-refresher