gpt4 book ai didi

methods - 是否可以在运行时绑定(bind)方法?

转载 作者:IT王子 更新时间:2023-10-29 01:37:27 27 4
gpt4 key购买 nike

我有以下构造:

type Foo struct {
Bar func(foo *Foo) bool
}

因为 Bar 并不是真正的方法,它接受 Foo 作为参数(就像 Python 的绑定(bind)方法中的 self )。但是,如果有简单的方法,我会把它作为一种方法绑定(bind)到结构上。我怀疑我可以使用反射,但我想让它保持微不足道。是否有将函数绑定(bind)到结构的技巧?你会怎么做?

编辑:我将添加一个我正在做的具体示例。

type Route struct {
Matcher func(route *Route, r *http.Request) bool
}

Route 接受一个自定义的 Matcher 函数。如果未设置,则在注册路由时设置默认匹配器函数:

func (mux *ServeMux) HandleRoute(r Route) {
// ...

// Set default matcher.
if r.Matcher == nil {
r.Matcher = mux.RouteMatcher
}

// ...
}

然后该函数用于进行匹配:

func (mux *ServeMux) Match(r *http.Request) Route {
// ...

if route.Matcher(&route, r) {
...
}

...
}

该函数未绑定(bind)到路由。我的问题是,这是否是设置自定义可调用项的合理/惯用方式,或者是否有技巧可以使函数作为方法“绑定(bind)”到结构。

最佳答案

你没有解释你想要完成的事情。这有什么问题吗?

package main

import "fmt"

type Foo struct{}

func (f *Foo) Bar() bool {
return true
}

func main() {
var f Foo
fmt.Println(f.Bar())
}

输出:

true

你想做这样的事情吗?

package main

import "fmt"

type BarFunc func(foo *Foo) bool

type Foo struct {
BarFunc
}

func (f *Foo) Bar() bool {
return f.BarFunc(f)
}

func UserBarFunc(foo *Foo) bool { return true }

func main() {
var f Foo
f.BarFunc = UserBarFunc
fmt.Println(f.Bar())
}

输出:

true

关于methods - 是否可以在运行时绑定(bind)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7057579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com