98

Goはラムダ式または同様のものをサポートしていますか?

ラムダ式(Ruby)を使用する別の言語からライブラリを移植したいと思います。

4

7 に答える 7

85

はい。

以下は、慎重にコピーして貼り付けた例です。

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());
}
于 2012-08-01T19:44:05.463 に答える
51

ラムダ式は関数リテラルとも呼ばれます。Goはそれらを完全にサポートします。

言語仕様を参照してください:http: //golang.org/ref/spec#Function_literals

例と説明を含むコードウォークを参照してください:http: //golang.org/doc/codewalk/functions/

于 2012-08-02T17:35:25.673 に答える
8

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

引数なし、戻り値なし (void)

func() {
   fmt.Println("Some String Value")
} 
//Js similar: () => {console.log("Some String Value")}

引数あり、戻り値なし (void)

func(arg string) {
    fmt.Println("Some String " + arg)
}
//Js: (arg) => {console.log("Some String Value" + arg)}
于 2019-01-13T16:40:30.547 に答える
1

私が探していたまだ提供されていない例は、匿名関数から直接変数に値を割り当てることです。

test1, test2 := func() (string, string) {
    x := []string{"hello", "world"}
    return x[0], x[1]
}()

()注:関数を実行して値を返すには、関数の末尾に括弧が必要です。そうしないと、関数のみが返され、assignment mismatch: 2 variable but 1 valuesエラーが発生します。

于 2019-08-23T11:52:16.533 に答える