英文:
In Go is it possible to have a pointer to a member function/method that takes parameters?
问题
如果我有以下代码:
type Foo struct {
// 一些数据
}
func (f *Foo) Op1() bool {
// 执行操作并返回一个布尔值
}
func (f *Foo) Op2(other int) bool {
// 使用内部数据和传入的参数执行不同的操作
}
我知道我可以存储对第一个方法的指针。
fn := f.Op1
并调用它
if fn(f) { // 做一些事情 }
但是如果我想对Op2
做同样的事情怎么办?
我目前通过定义一个包装函数来模拟它,该函数接受一个Foo
和值,并调用操作。但这是很多样板代码。
英文:
If I have
type Foo struct {
// some data
}
func (f *Foo) Op1() bool {
// perform operation and return a bool
}
func (f *Foo) Op2(other int) bool {
// perform a different operation using internal data
// and the passed in parameter(s)
}
I know I can store a pointer to the first method.
fn := f.Op1
and call it
if fn(f) { // do something }
But what if I want to do the same with Op2
?
I am currently faking it by defined a wrapper function which takes a Foo
and the values and calls the operation. But that is a lot of boiler plate code.
答案1
得分: 4
使用方法表达式
在这种情况下,我们从类型中获取一个引用,然后需要将实例作为第一个参数传递。
fn2 := (*Foo).Op2
f := &Foo{}
fn2(f, 2)
引用实例方法
在这种情况下,实例已经绑定到方法上,你只需要提供参数即可:
fn2 := f.Op2
fn2(2)
Playground: https://play.golang.org/p/e0gUIHzj7Z
英文:
Using method expressions
In this case, we get a reference from the type, then you need to pass an instance as the first argument.
fn2 := (*Foo).Op2
f := &Foo{}
fn2(f, 2)
Referencing an instance method
In this case, the instance is already bind to the method and you can just provide the arguments:
fn2 := f.Op2
fn2(2)
Playground: https://play.golang.org/p/e0gUIHzj7Z
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论