[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_name 和operator .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