Difference between revisions of "Error Messages/40616"
(Corrected misleading text and added a workaround to Remedies) |
m (→Cause) |
||
Line 5: | Line 5: | ||
= Cause = | = Cause = | ||
− | You | + | You may not assign a value to a slice (subscripted element) of a global variable. |
+ | You may assign to a slice of a local variable. And in a Script or Function called from the Script | ||
+ | of a Button or other object, you may assign a new value to a global variable (but not a slice of it.) | ||
This example triggers this error. Here BadDef tries to assign to a slice of the global variable X: | This example triggers this error. Here BadDef tries to assign to a slice of the global variable X: | ||
Line 12: | Line 14: | ||
Variable X := Table(I)(7, 8, 3, 2, 5, 4, 9, 1, 5) | Variable X := Table(I)(7, 8, 3, 2, 5, 4, 9, 1, 5) | ||
Variable BadDef := (X[I = 5] := 99) | Variable BadDef := (X[I = 5] := 99) | ||
− | |||
= Remedies = | = Remedies = |
Revision as of 18:06, 1 October 2013
Error Message Examples
You cannot assign to a slice or subscript of a global variable object.
Cause
You may not assign a value to a slice (subscripted element) of a global variable. You may assign to a slice of a local variable. And in a Script or Function called from the Script of a Button or other object, you may assign a new value to a global variable (but not a slice of it.)
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] := 99)
Remedies
While you may not normally assign to a global variable, either directly or to a slice of the variable, in the definition of a variable, you may assign to a global variable (but not to a slice) in a Button script or in a Function called from a Button script Scripts and Buttons. The latter does not violate the No-side effects principle because by clicking a button the user causes the effect directly.
You can often work around the prohibition against slice assignment by writing a function, F, that
- copies the global array, X, into a local variable, local_x,
- assigns to a slice of the array, local_x, and then
- assigns the value of local_x back to the global, X,
- and finally, cal function F from a Button script.
For example, suppose you want to assign 999 to the 5th element over index I of global variable X:
Function Assign_to_X(v) Definition: Variable local_x := X; local_x[I=5] := v; X := local_x
Button Do_Assign Script: Assign_to_X(999)
When you press the button, Do_Assign, it calls Assign_to_X(999) and completes the slice assignment.
Enable comment auto-refresher