golang関数クロージャと匿名関数の違い

WBOY
リリース: 2024-04-24 09:24:01
オリジナル
539 人が閲覧しました

Go 言語におけるクロージャと匿名関数の主な違いは、クロージャは作成スコープ外の変数にアクセスできるのに対し、匿名関数は作成スコープ外の変数にアクセスできないことです。

golang関数クロージャと匿名関数の違い

#Go 言語における関数クロージャと匿名関数の違い

#クロージャ

クロージャは、作成範囲外の変数にアクセスできる関数です。これは、クロージャの作成後に外部変数が使用できなくなった場合でも、クロージャは外部変数への参照を保持できることを意味します。

func createClosure() func() {
    x := 10
    return func() {
        fmt.Println(x)
    }
}
ログイン後にコピー

上の例では、

createClosure

関数は、変数 x にアクセスできるクロージャを返します。

匿名関数

匿名関数は、明示的な名前のない関数です。これらは通常、引数として渡すか、他の関数からの戻り値として渡すために使用されます。

func main() {
    fmt.Println(func(x int) int { return x * x }(5))
}
ログイン後にコピー

この例では、1 つのパラメーターを受け取り、そのパラメーターの 2 乗を返す無名関数を作成します。

2 つの違い

クロージャと匿名関数の主な違いは、クロージャは作成範囲外の変数にアクセスできるのに対し、匿名関数はアクセスできないことです。これは、クロージャは外部変数への参照を運ぶことができますが、匿名関数はそれができないことを意味します。

実際のケース

クロージャの例:

数値の 2 乗を計算する関数が必要だと想像してください。クロージャを使用して、外側のスコープに格納されている定数を二乗演算の係数として使用する関数を作成できます。

func createSquaringFunction(coefficient int) func(int) int {
    return func(x int) int { return coefficient * x * x }
}

func main() {
    squaringFunction := createSquaringFunction(2)
    fmt.Println(squaringFunction(5)) // 输出:50
}
ログイン後にコピー

匿名関数の例:

リスト内の各数値に対して何らかのアクションを実行したいと想像してください。匿名関数を使用して、

map

関数に渡され、リスト内の各要素に適用される関数を作成できます。 rree

以上がgolang関数クロージャと匿名関数の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート