9

Pythonのように、Goで配列を複数の変数にアンパックすることは可能ですか?

例えば

var arr [4]string = [4]string {"X", "Y", "Z", "W"}
x, y, z, w := arr

これは Go ではサポートされていないことがわかりました。書き込みを避けるためにできることはありますかx,y,z,w=arr[0],arr[1],arr[2],arr[3]

さらに、次のようなものをサポートすることは可能ですか

var arr []string = [4]string {"X", "Y", "Z", "W"}
x, y, z, w := arr

配列ではなくスライスになっているため、コンパイラは len(arr)==4 かどうかを暗黙的にチェックし、そうでない場合はエラーを報告することに注意してください。

4

2 に答える 2

4

あなたが正しく理解しているように、そのような構造は Go ではサポートされていません。IMO、そうなる可能性は低いです。Go の設計者は、正当な理由から直交性を好みます。たとえば、割り当てを考えてみましょう。

  • LHS 型は RHS 型と一致します (最初の概算で)。
  • LHS の「ホーム」の数は、RHS の「ソース」(表現) の数と一致します。

そのような原則を評価しない Python のやり方は、あちこちでいくらか実用的かもしれません。しかし、言語が単純で規則的なパターンに従っている場合、大規模なコード ベースを読み取る際の認知負荷は低くなります。

于 2013-07-29T22:16:11.283 に答える