Operator overloading

All operator in Hades can be overloaded. The syntax for this is similar to overloading an inherited function. Operator overloading in Hades always assumes a right operation so the base for the operation is always the parameter on the left.

Example

with console from std:io

class Vector
    var x = 0
    var y = 0
    var z = 0
    
    func Vector(x,y,z)
        this.x = x
        this.y = y
        this.z = z
    end
    
    func! toString()
        put "{},{},{}".format(x,y,z)
    end
    
    func! op+(v)
        if(v is int)
            put Vector(x+v,y+v,z+v)
        else if(v is Vector)
            put Vector(x + v.x, y + v.y, z + v.z)
        end
        
        put null
    end
end

var v1 = Vector(1,2,3)
var v2 = Vector(4,5,6)

var v3 = v1 + v2 //overloaded operator is called on v1
console.out(v3) //outputs: 5,7,9

Index operator overloading

One special case of operator overloading is when you want to overload the index operator [].

There are two functions that can be overwritten:

  • reading from an index: index(args indices)

  • writing to an index: index(args indicies, newValue)

Example

class MyWayCoolerMapImplementation
    private let map = Map()
    
    func! index(args indices)
        if (indices.length is 1)
            let index = indices[0]
            put map.get(index)
        end
        
        raise ArgumentError()
    end
    
    func! index(args indices, newValue)
        if (indices.length is 1)
            let index = indices[0]
            map.put(index, newValue)
        end
        
        raise ArgumentError()
    end
end

Last updated