Difference between revisions of "Error Messages/40616"

Line 17: Line 17:
 
= Remedies  =
 
= 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 [[Scripting|Scripts and Buttons]]. The latter does not violate the No-side effects principle because by clicking a button the user causes the effect directly.
+
If you want to assign to a slice of a global variable from a [[Scripting|Script]] or a user-defined Function called from a Script, you can do so indirectly. It's usually simplest to write the code in a user-defined Function called from a Script, rather than directly in a Script. In a Function F:
 
+
# copy the global array, X, into a local variable, local_x,
You can often work around the prohibition against slice assignment by writing a function, F, that
+
# assign a new value to a slice of local_x,  
# copies the global array, X, into a local variable, local_x,
+
# assign the value of local_x back to the global, X,
# assigns to a slice of the array, local_x, and then
+
# finally, call function F from a Button script.  
# 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:
 
For example, suppose you want to assign 999 to the 5th element over index I of global variable X:

Revision as of 18:12, 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

If you want to assign to a slice of a global variable from a Script or a user-defined Function called from a Script, you can do so indirectly. It's usually simplest to write the code in a user-defined Function called from a Script, rather than directly in a Script. In a Function F:

  1. copy the global array, X, into a local variable, local_x,
  2. assign a new value to a slice of local_x,
  3. assign the value of local_x back to the global, X,
  4. finally, call 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.



You are not allowed to post comments.

Comments
<comments />