Repository URL to install this package:
|
Version:
1.4.0-1 ▾
|
Define overload func in inline func literal style (see overloadfunc1/add.gop):
func add = ( func(a, b int) int { return a + b } func(a, b string) string { return a + b } ) println add(100, 7) println add("Hello", "World")
Define overload func in ident style (see overloadfunc2/mul.gop):
func mulInt(a, b int) int { return a * b } func mulFloat(a, b float64) float64 { return a * b } func mul = ( mulInt mulFloat ) println mul(100, 7) println mul(1.2, 3.14)
Define overload method (see overloadmethod/method.gop):
type foo struct { } func (a *foo) mulInt(b int) *foo { println "mulInt" return a } func (a *foo) mulFoo(b *foo) *foo { println "mulFoo" return a } func (foo).mul = ( (foo).mulInt (foo).mulFoo ) var a, b *foo var c = a.mul(100) var d = a.mul(c)
Define overload unary operator (see overloadop1/overloadop.gop):
type foo struct { } func -(a foo) (ret foo) { println "-a" return } func ++(a foo) { println "a++" } var a foo var b = -a a++
Define overload binary operator (see overloadop1/overloadop.gop):
type foo struct { } func (a foo) * (b foo) (ret foo) { println "a * b" return } func (a foo) != (b foo) bool { println "a != b" return true } var a, b foo var c = a * b var d = a != b
However, binary operator usually need to support interoperability between multiple types. In this case it becomes more complex (see overloadop2/overloadop.gop):
type foo struct { } func (a foo) mulInt(b int) (ret foo) { println "a * int" return } func (a foo) mulFoo(b foo) (ret foo) { println "a * b" return } func intMulFoo(a int, b foo) (ret foo) { println "int * b" return } func (foo).* = ( (foo).mulInt (foo).mulFoo intMulFoo ) var a, b foo var c = a * 10 var d = a * b var e = 10 * a
TODO
TODO