douyi1963
2012-09-29 18:45
采纳率: 0%
浏览 124
已采纳

可以在Go中将函数作为参数传递吗?

In Java I can do something like

derp(new Runnable { public void run () { /* run this sometime later */ } })

and "run" the code in the method later. It's a pain to handle (anonymous inner class), but it can be done.

Does Go have something that can facilitate a function/callback being passed in as a parameter?

图片转代码服务由CSDN问答提供 功能建议

在Java中,我可以做类似

  derp(new 可运行{public void run(){/ *稍后再运行* /}})
   
 
 

并稍后“运行”方法中的代码。 处理(匿名内部类)很痛苦,但是可以做到。

Go是否有一些可以促进函数/回调作为参数传递的东西?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • dqq3623 2012-09-29 19:18
    已采纳

    Yes, consider some of these examples:

    package main
    
    import "fmt"
    
    // convert types take an int and return a string value.
    type convert func(int) string
    
    // value implements convert, returning x as string.
    func value(x int) string {
        return fmt.Sprintf("%v", x)
    }
    
    // quote123 passes 123 to convert func and returns quoted string.
    func quote123(fn convert) string {
        return fmt.Sprintf("%q", fn(123))
    }
    
    func main() {
        var result string
    
        result = value(123)
        fmt.Println(result)
        // Output: 123
    
        result = quote123(value)
        fmt.Println(result)
        // Output: "123"
    
        result = quote123(func(x int) string { return fmt.Sprintf("%b", x) })
        fmt.Println(result)
        // Output: "1111011"
    
        foo := func(x int) string { return "foo" }
        result = quote123(foo)
        fmt.Println(result)
        // Output: "foo"
    
        _ = convert(foo) // confirm foo satisfies convert at runtime
    
        // fails due to argument type
        // _ = convert(func(x float64) string { return "" })
    }
    

    Play: http://play.golang.org/p/XNMtrDUDS0

    Tour: https://tour.golang.org/moretypes/25 (Function Closures)

    评论
    解决 无用
    打赏 举报
查看更多回答(5条)

相关推荐 更多相似问题