This example shows indexer accessor methods, which allow an object to respond to array subscript syntax:
Source:
Expand


namespace Indexer is
    use System.Exception;

    // this class acts like an array of integers indexed by the characters 'A'..'A' + length 
    class MyArray is
        int[] values;

        void init( int length ) is
            values = new int[length];
        si

        get int Length is
            return values.length;
        si

        // indexed get accessor is called when an object of this class is subscripted
        // like an array and the result is read:
        get int[char index] is
            return values[cast int(index - 'A')];
        si

        // indexed get accessor is called when an object of this class is subscripted
        // like an array and the result is assigned to:
        set int[char index] = v is
            values[cast int(index - 'A')] = v;
        si

        String toString() is
            return Class.Name + "(" + values.toString() + ")";
        si
    si

    class Main is
        void init() is
            var a = new MyArray(26);

            var n = 1;

            foreach var c; 'A'..'Z' do
                IO.Std.out.println( "set element " + c + " = " + n );
                a[c] = n;
                n = n * 2;
            od

            IO.Std.out.println( "result: " + a );
        si      
    si
si
Output:
Expand
set element A = 1
set element B = 2
set element C = 4
set element D = 8
set element E = 16
set element F = 32
set element G = 64
set element H = 128
set element I = 256
set element J = 512
set element K = 1024
set element L = 2048
set element M = 4096
set element N = 8192
set element O = 16384
set element P = 32768
set element Q = 65536
set element R = 131072
set element S = 262144
set element T = 524288
set element U = 1048576
set element V = 2097152
set element W = 4194304
set element X = 8388608
set element Y = 16777216
set element Z = 33554432
result: LSPPage.P_29533_19.Indexer.MyArray(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432)
site design and content copyright (C) jeek 1995-2010     [ 13132 ]