Friday, July 12, 2019

Receiver bind to special type of methods


Welcome, After a long time, I will share next article about advance methods that can increase problem efficiency, very useful . Let's begin this.

Method Value :
     Method Value are special type of methods. These methods don't receive receiver parameter. That why they are special methods. These are generally use in package level api or client defined behaviour. Let study example case i

package main

import (
"fmt"
)

type Op struct{
x int
}

func(o *Op)Add(y int)int{
return o.x +y
}

func main() {
// case i
op := Op{4}  // method value
res := op.Add
fmt.Println(res(4))

//case ii
oprend := &Op{5}   // method expression
add := (*oprend).Add
fmt.Println(add(4))
}

Method Expression:
        Method Expression are similar like to method values, but there is one great difference and is methods take parameter as a receiver, just like old example but you can bind with more than one methods. In method expression (*T).f is an unusual way to write a selector syntax . The above example( case ii) show both method expression but in next code you deeply understand.

type Point struct{ X, Y float64 }
func (p Point) Add(q Point) Point { return Point{p.X + q.X, p.Y + q.Y} }
func (p Point) Sub(q Point) Point { return Point{p.X - q.X, p.Y - q.Y} }
type Path []Point
func (path Path) TranslateBy(offset Point, add bool) {
  var op func(p, q Point) Point
   if add { op = Point.Add }
   else { op = Point.Sub }
   for i := range path {
          // Call either
       path[i].Add(offset)
               //or
       path[i].Sub(offset). path[i] = op(path[i], offset)
 }
}
I hope you enjoy, have a great day.


No comments:

Post a Comment

Do you support us?

Business address
0x1D24D8f27ea73ff604C7685246bdC6ae55bddaEF

Mighty Roman Empire's trail and err

  The Roman Empire's strength, fuel by economical corridor and best men's for the service but Golden days might be over when corrup...

Achieves