Difference between revisions of "Error Messages/40616"

(→‎Remedies: show workaround)
Line 20: Line 20:
 
= Remedies  =
 
= Remedies  =
  
One way to get around this issue is to use a Button which can have side effects and can assign to global variable slices. [[Scripting|Scripts and Buttons]] are only available in Analytica Enterprise and higher.
+
You may assign to a global variable in a Button script or in a Function called from a Button script [[Scripting|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 also assign to a global variable, V, from the definition of X when V is defined as ComputedBy(X). Here is a link to the documentation of function [[ComputedBy]].
+
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.
  
 
<br><comments />
 
<br><comments />

Revision as of 22:25, 16 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 Object2 is assigning to a slice of the global variable object, Object1.

Definition of Index1:
1..9

Definition of Object1:
Table(Index1)(7, 8, 3, 2, 5, 4, 9, 1, 5)

Definition of Object2:
Object[Index1 = 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.



You are not allowed to post comments.

Comments
<comments />