64 lines
865 B
Go
64 lines
865 B
Go
package main
|
|
|
|
type Func func(a int, b int) int
|
|
type Func2 func(a int, b int) int
|
|
|
|
type Call struct {
|
|
fn Func
|
|
n int
|
|
}
|
|
|
|
func (c *Call) add(a int, b int) int {
|
|
return a + b + c.n
|
|
}
|
|
|
|
func add(a int, b int) int {
|
|
return a + b
|
|
}
|
|
|
|
func demo1(n int) Func {
|
|
m := &Call{n: n}
|
|
m.fn = m.add
|
|
return m.fn
|
|
}
|
|
|
|
func demo2() Func {
|
|
m := &Call{}
|
|
return m.add
|
|
}
|
|
|
|
func demo3() Func {
|
|
return add
|
|
}
|
|
|
|
func demo4() Func {
|
|
return func(a, b int) int { return a + b }
|
|
}
|
|
|
|
func demo5(n int) Func {
|
|
return func(a, b int) int { return a + b + n }
|
|
}
|
|
|
|
func main() {
|
|
n1 := demo1(1)(99, 200)
|
|
println(n1)
|
|
|
|
n2 := demo2()(100, 200)
|
|
println(n2)
|
|
|
|
n3 := demo3()(100, 200)
|
|
println(n3)
|
|
|
|
n4 := demo4()(100, 200)
|
|
println(n4)
|
|
|
|
n5 := demo5(1)(99, 200)
|
|
println(n5)
|
|
|
|
var fn func(a int, b int) int = demo5(1)
|
|
println(fn(99, 200))
|
|
|
|
var fn2 Func2 = (Func2)(demo5(1))
|
|
println(fn2(99, 200))
|
|
}
|