[NAME]
ALL.dao.class.operator

[TITLE]
操作符重载

[DESCRIPTION]

如果一个用户定义的类重载了相关的运算符,那么它的实例将跟内置类型那样 直接使用操作符进行运
算。

道类支持基本的算数运算符的重载。例如加法就可以通过定义一个operator+ 方法来实现: 
     
   1  class Integer
   2  {
   3      var value = 0
   4  
   5      routine Integer( val = 0 ){ value = val }
   6  
   7      static operator +( A : Integer, B : Integer ){
   8          io.writeln( 'Integer + Integer' );
   9          return Integer( A.value + B.value );
  10      }
  11  }
  12  var I1 = Integer( 123 )
  13  var I2 = Integer( 456 )
  14  var I3 = I1 + I2
     

对类成员的访问也可以被定义。这种定义需要实现operator .field_nameoperator .field_name=方
法: 
     
   1  class Integer
   2  {
   3      private
   4      var value = 0
   5  
   6      public
   7      routine Integer( val = 0 ){ value = val }
   8  
   9      operator .value(){ io.writeln( 'get value' ) }
  10      operator .value=( v : int ){ value = v; io.writeln( 'get value' ) }
  11  }
  12  var I = Integer( 123 )
  13  var v = I.value
  14  I.value = 456
     


有些类的用途类似容器类,它的数据需要以下标的方式访问。 这可由实现[][]=来实现。 
     
   1  class IntList
   2  {
   3      var ints = {}
   4  
   5      routine Append( value : int ){ ints.append( value ) }
   6      operator []( index : int ){ return ints[index] }
   7      operator []=( value :int, index : int ){ ints[index] = value }
   8  }
   9  var ilist = IntList()
  10  ilist.Append( 123 )
  11  ilist.Append( 456 )
  12  ilist[0] = 789
  13  io.writeln( ilist[0] )
     


TODO: cast