dpxpz37157 2015-07-22 11:07
浏览 238
已采纳

如何在Go中声明指向方法的函数指针

I am trying to create function pointer to a function that has a method receiver. However, I can't figure out how to get it to work (if it is possible)?

Essentially, I have the following:

type Foo struct {...}
func (T Foo) Bar bool {
   ... 
}

type BarFunc (Foo) func() bool // Does not work.

The last line of the code gives the error

syntax error: unexpected func, expecting semicolon or newline
  • 写回答

2条回答 默认 最新

  • douxin2003 2015-07-22 11:22
    关注

    If you want to create a function pointer to a method, you have two ways. The first is essentially turning a method with two arguments into a function with one:

    type Summable int
    
    func (s Summable) Add(n int) int {
        return s+n
    }
    
    var f func(s Summable, n int) int = (Summable).Add
    
    // ...
    fmt.Println(f(1, 2))
    

    The second way will "bind" the function to the method's receiver:

    s := Summable(1)
    var f func(n int) int = s.Add
    fmt.Println(f(2))
    

    Playground: http://play.golang.org/p/ctovxsFV2z.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站