Goは、PythonのLambdaを思い出させる無名関数/クロージャをサポートしていますが、コードでそれらを使用するのが理想的なのはいつですか?
質問する
3923 次
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 に答える