Files
llgo/cl/_testrt/closureconv/in.go
2025-04-03 16:26:11 +08:00

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))
}