You can know about function values but this article also link with my previous blog. Let's start with "Anonymous Caller Function"
package mainWhat we already Know ?
import (
"fmt"
)
func squares() func() int {
var x int
return func() int {
x++
return x * x
}
}
func main() {
f := squares()
fmt.Println(f()) // "1"
fmt.Println(f()) // "4"
fmt.Println(f()) // "9"
fmt.Println(f()) // "16"
}
This code confuse you, don't worry let's start what we already know about functions.
func squares() int{ return x *x}. This function return square which we pass as argument.
f := squares() function definition receive by f for further processing.
What we don't know?
func squares() func() int {1. func() int: this is an anonymous function. Anonymous function are those functions which is similar like inner function, but without name.
var x int
return func() int {
x++
return x * x
}
}
2. return func() int: this function inside square function. Anonymous function use local variables, which are already declare in square function. Return fun() int tells that compiler anonymous function value. Again this is a function so, we can like function except before function return keyword use. Actually Function B take Function A as a input and after processing it return as a output of Function AB. That's why confuse so many times.
Recursion in Anonymous Function:
var visitAll func(items []string)
visitAll = func(items []string) {}
Recursion in Anonymous function in two steps.
1. declare a variable along with function definition
2. initialize variable with function which to be recursive
func topoSort(m map[string][]string) []string {
var order []string seen := make(map[string]bool)
var visitAll func(items []string)visitAll = func(items []string) {
for _, item := range items {
if !seen[i tem] { seen[item] = true
visitAll(m[item])
order = append(order, item) }
}
}
var keys []string
for key := range m {
keys = append(keys, key)
}
sort.Strings(keys)
visitAll(keys) return order
}
Warning:
If you don't follow these steps these, then program will not execute.
Comments
Post a Comment