TSL语言基础 > 高级语言(新一代) > 对象对基础算符与基础函数的重载 > TSL对象对遍历算符的重载 > for in循环在对象中的重载

For in循环在对象中重载的示例    

  • 实际对对象进行for in循环时,对对象的data属性进行循环操作。
    a:=array("A","B","C");
    echo "For in table---------\r\n";
    for n,v in a do
    begin
     echo n,"->",v,"\r\n";
    end;

    echo "For in obj-一个变量---------\r\n";
    c1:=new c(a);
    for n in c1 do
    begin
      echo n,"\r\n";
    end;
    echo "For in obj-两个变量---------\r\n";
    for n,v in c1 do
    begin
      echo n,"->",v,"\r\n";
    end;
    return;
    type c=class
    public
     data;
     lengtD;
     findex;
     function create(v);
     begin
      data:=v;
      lengtD:=length(v);
     end;
     function operator for(flag);//flag控制参数个数,n,v
     begin
      n:=flag .& 2;//n即为高位数值,1表示两个变量,0表示只有一个变量
      b:=flag .& 1;//b即为低位数值,1表示不是第一次循环,0表示第一次循环
      echo "--for--:",flag," flag高位:",n," flag低位:",b,"\r\n";
      if not b then //循环开始初始化
        findex:=0
      else if findex<lengtD-1 then findex++; //循环过程非初始化
      else return nil;//循环结束
      if n then//for i,v in 方式,返回对应I,v的值
        return array(findex,data[findex])
      else//for i in 方式,返回对应I的值
       return findex;
     end;
    end;

    打印结果:
    For in table---------
    0->A
    1->B
    2->C
    For in obj-一个变量---------
    --for--:0 flag高位:0 flag低位:0
    0
    --for--:1 flag高位:0 flag低位:1
    1
    --for--:1 flag高位:0 flag低位:1
    2
    --for--:1 flag高位:0 flag低位:1
    For in obj-两个变量---------
    --for--:2 flag高位:2 flag低位:0
    0->A
    --for--:3 flag高位:2 flag低位:1
    1->B
    --for--:3 flag高位:2 flag低位:1
    2->C
    --for--:3 flag高位:2 flag低位:1
    解析:通过上面的过程可以看出,我们可以在对象中对for in操作进行重载实现,通过对flag的控制,可以实现每次循环过程中对对象的操作。
    打印结果中,两个循环变量的循环中,高位值为2是因为代表二进制数值0b10,即二进制中高位为1。