- status: open --> closed-accepted
This patch adds a new variable type "array", something that has been requested many times.
I have been resistant to the idea in the past largely because it wasn't clear how to implement it cleanly, but two things have changed my mind. (1) The data structures used to support datablocks in version 5 provide a model for how to support arrays (2) I ran into some real-world projects from my own work that would be so much easier with arrays. I know, I know, other people have been saying that all along.
The documentation for the current version of the patch is repeated below
Arrays are implemented as indexed lists of user variables. The elements in an array are not limited to a single type of variable. Arrays must be created explicitly before being referenced. The size of an array cannot be changed after creation. All elements are initially undefined. In most places an array element can be used instead of a named user variable. Example: array A[6] A[1] = 1 A[2] = 2.0 A[3] = {3.0, 3.0} A[4] = "four" A[6] = A[2]**3 array B[5] = [ 1, 2.0, A[3], "four" ] do for [i=1:6] { print A[i], B[i] } prints: 1 1 2.0 2.0 {3.0, 3.0} {3.0, 3.0} fourfour <undefined> <undefined> 8.0 array index out of range Notes: Arrays and variables share the same namespace, so for example use of a string variable named FOO will destroy any previously created array with name FOO.
I have been using this patch for a while now. The only problems I have encountered have to do with cases where an uninitialized array element is encountered during evaluation of a function or expression. Strictly speaking this isn't a new problem, it's just that previously it was hard to generate a variable that was recognized by name but was currently of type NOTDEFINED. The piece of the code with the least testing is the initializer statement "Array FOO[size] = [ <comma-separated-list-of-initial-values> ]".
Please give it a try.