TSL语言基础 > Object TSL > 算符重载

面向对象的Operator重载支持[]    

简述

  • 用[]或者[0]重载读取过程,即实现指定下标时取值的操作,用[1]重载写入过程,即实现指定下标进行赋值的操作。
    重载读取定义:operator[](idx[;s]) 或operator[0](index[;s])
    重载写入定义:operator[1](idx,v)

    其中,idx表示当前下标值,支持整型与字符串
    重载读取中,s表示当前层级,中间层从0开始,依次为0,1,2,3,....,最后一层时为-1。
    重载写入中,v表示写入的值,但在中间层时它是一个none类型,层级由none类型的值进行确定,最后一层时为写入的值。


    []重载时允许多级,重载中返回对象表示继续下一层
    在[0]算符重载时,通过第二个参数可判断当前层级,当小于0时表示当前处于最后一层,重写实现中返回对象表示继续下一层,否则访问结束。
    在[1]算符重载时,可通过ifnone(v)判断第二个参数,若为真,表示为中间级,此时实现中返回对象表示继续下一层,判断为真时当前处于最后一层,此时可对该参数值进行赋值操作。

    对象算符重载数组set算符时级别的获取与当前状态的判定:
      getnone函数可以获得none类型包含的int值。
      ifnone(v,i)可以判断是否属于none并且所含整数位i。
      当对象重载下标写入行为时,若当前为中间级,则第二个参数为none类型,此时该none类型的值为下标的级别,从0开始,依次为0,1,2,3....。如果写入的过程出现错误,则调用写入方法进行重载,此时进入的none类型值为-1,这样做方便数据库等事务的实现。


    例如:实现对对象数组成员的读写-单层的实现
    type bb=class
     data;
     public
      function create(v);
      begin
        data:=v;
      end;
      function operator[](index);
      begin
        return data[index];
      end;
      function operator[1](index,v);
      begin
       echo "set->",index,"->",v;
       data[index]:=v;
      end;
    end;

    调用测试如:
    t:=array(1,2,3,4,5);
    b:=new bb(t);
    a:=b[2];//取值
    echo "b[2]:",a;
    b[3]:=999; //重新赋值
    echo "b.data:",tostn(b.data);

    打印如下:
    b[2]:3
    set->3->999
    b.data:
    array(1,2,3,999,5)
内容