4

Goは、PythonのLambdaを思い出させる無名関数/クロージャをサポートしていますが、コードでそれらを使用するのが理想的なのはいつですか?

4

2 に答える 2

3

関数リテラルは、それらがクロージャーであるという事実が有用/使用される場合に最も理にかなっていると思います。たとえば、次のように考えてください。

type handler func()

func HanldeSomething(h handler)  {
        //...
        h()
        // ...
}

func Elsewhere() {
        var foo int
        HandleSomething(handler(func(){
                fmt.Println("debug: foo in Elsewhere is", foo)
        }))
}

このように、hが呼び出されるHandleSomethingと、 のコンテキストを使用して何かを言ったり実行したりできますElsewhere。それは多くの状況で便利です。

于 2012-12-15T09:34:56.867 に答える
3

jnml は、匿名関数が役立つケースの 1 つを既に示しています。

他の場所では呼び出されない関数を渡す必要がある場合に、これらを使用できることを追加します。

ゴルーチンの起動:

go func() {
    ...
}()

いくつかのコードを関数に渡します:

http.Handle("/ws", websocket.Handler(func(ws *websocket.Conn) {
  ...
于 2012-12-15T09:47:52.460 に答える