将结构实例上的方法作为参数传递
passing a method on an instance of a struct as a parameter
我有一个接受函数作为参数的函数:
func send(n int, c func(x int) int) int {
return c(n)
}
我有一个结构,上面定义了一个方法
type data struct {
value int
}
func (t *data) set(x int) {
t.value = x
}
我想创建一个结构实例,并将绑定到该实例的方法 set
作为第二个参数传递给 send
函数,以设置 value
字段send
.
这可能吗?
您可以使用 method value。这是与您的示例类似的内容:
package main
import "fmt"
func send(n int, c func(x int)) {
c(n)
}
type data struct {
value int
}
func (t *data) set(x int) {
t.value = x
}
func main() {
d := data{1}
fmt.Println(d)
send(2, d.set)
fmt.Println(d)
}
我无法使用问题中的类型,因为函数参数发送 returns 一个值,而方法没有。如果您确实需要使用问题中的类型,则使用匿名函数使方法适应函数参数类型:
send(2, func(v int) int { d.set(v); return 0 })
我有一个接受函数作为参数的函数:
func send(n int, c func(x int) int) int {
return c(n)
}
我有一个结构,上面定义了一个方法
type data struct {
value int
}
func (t *data) set(x int) {
t.value = x
}
我想创建一个结构实例,并将绑定到该实例的方法 set
作为第二个参数传递给 send
函数,以设置 value
字段send
.
这可能吗?
您可以使用 method value。这是与您的示例类似的内容:
package main
import "fmt"
func send(n int, c func(x int)) {
c(n)
}
type data struct {
value int
}
func (t *data) set(x int) {
t.value = x
}
func main() {
d := data{1}
fmt.Println(d)
send(2, d.set)
fmt.Println(d)
}
我无法使用问题中的类型,因为函数参数发送 returns 一个值,而方法没有。如果您确实需要使用问题中的类型,则使用匿名函数使方法适应函数参数类型:
send(2, func(v int) int { d.set(v); return 0 })