Goはラムダ式または同様のものをサポートしていますか?
ラムダ式(Ruby)を使用する別の言語からライブラリを移植したいと思います。
はい。
以下は、慎重にコピーして貼り付けた例です。
package main import fmt "fmt" type Stringy func() string func foo() string{ return "Stringy function" } func takesAFunction(foo Stringy){ fmt.Printf("takesAFunction: %v\n", foo()) } func returnsAFunction()Stringy{ return func()string{ fmt.Printf("Inner stringy function\n"); return "bar" // have to return a string to be stringy } } func main(){ takesAFunction(foo); var f Stringy = returnsAFunction(); f(); var baz Stringy = func()string{ return "anonymous stringy\n" }; fmt.Printf(baz()); }
ラムダ式は関数リテラルとも呼ばれます。Goはそれらを完全にサポートします。
言語仕様を参照してください:http: //golang.org/ref/spec#Function_literals
例と説明を含むコードウォークを参照してください:http: //golang.org/doc/codewalk/functions/
golangはラムダ式を作らないようですが、文字どおりの無名関数が使えます。JSで同等のものを比較する勉強をしていたときにいくつか例を書きました。参考になれば幸いです!!
func() string {
return "some String Value"
}
//Js similar: () => 'some String Value'
func(arg string) string {
return "some String" + arg
}
//Js similar: (arg) => "some String Value" + arg
func() {
fmt.Println("Some String Value")
}
//Js similar: () => {console.log("Some String Value")}
func(arg string) {
fmt.Println("Some String " + arg)
}
//Js: (arg) => {console.log("Some String Value" + arg)}
私が探していたまだ提供されていない例は、匿名関数から直接変数に値を割り当てることです。
test1, test2 := func() (string, string) {
x := []string{"hello", "world"}
return x[0], x[1]
}()
()
注:関数を実行して値を返すには、関数の末尾に括弧が必要です。そうしないと、関数のみが返され、assignment mismatch: 2 variable but 1 values
エラーが発生します。