2016-06-14 5 views
1

正しい名前とそれを検索する方法はわかりませんが、私はちょっとしたコードを見て、{}の中のステートメントで整理しました。私は、このようなグループ化ステートメントをサポートする理由が何であるか疑問に思っていますか?go中のステートメントブロック

コードは次のようになります。

// Check horizontal 
{ 
    left_to_win := 3 

    stop_1 := false 
    stop_2 := false 
    for x := 1; x <= 4; x++ { 
     // .... 
    } 
} 

// Check vertical 
{ 
    left_to_win := 3 

    stop_1 := false 
    stop_2 := false 

    for x := 1; x <= 4; x++ { 
     // ... 
    } 
} 

// Check diagonal bottom to top 
{ 
    left_to_win := 3 

    stop_1 := false 
    stop_2 := false 

    for x := 1; x <= 4; x++ { 
     // ... 
    } 
} 

を具体的な例では、それは簡単に単一の効用関数にリファクタリングすることができようにそれはそう。この機能の名前は何ですか?それを使用する時間の良い例がありますか?

+3

Goは、ブロックを使用してレキシカルスコープになっています。それは可変スコープ用です。 http://stackoverflow.com/questions/34684265/is-this-a-block-argument – JimB

+1

を参照してください。同じ機能は 'C'と' C++ 'でも利用できます(Goは特定のアイデアを前者から引き出します)。 – kostix

答えて

1

これらの中カッコは、ローカル変数のより具体的な範囲を定義しています。あなたのケースでは、各スコープはstop_1stop_2およびleft_to_winと宣言されています。追加の中括弧がなければ、1つのステートメントで宣言して割り当てる短い手:=を使用しているので、再宣言またはそれらの変数を定義しているというコンパイラエラーが発生します。この場合、コードは代わりに:=最初の宣言では=を割り当て、中括弧で定義されたスコープの必要性を取り除きます。

詳細はhereを参照してください。