ホームページ >バックエンド開発 >Golang >Go の可変個引数関数では列挙型引数とスライスを混在させることができますか?

Go の可変個引数関数では列挙型引数とスライスを混在させることができますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 19:45:26695ブラウズ

Can Go Variadic Functions Mix Enumerated Arguments and Slices?

可変個引数関数の引数の非互換性

Go では、可変個引数関数の引数は、可変数の引数を受け入れるパラメーターを指定する便利な方法を提供します。ただし、可変個引数関数で「展開された」スライスと通常のパラメータを混合する場合には、特定の制限があります。

根本的な制限は、可変個引数は明示的に列挙するか、スライスとして渡す必要があり、両方は許可しないことです。スライスが使用される場合 (...stuff)、新しいスライスを作成せずに、可変引数パラメーターの値として直接渡されます。対照的に、要素 (例: "bar"、stuff...) を列挙すると、指定された引数を使用して新しいスライスが作成されます。

コンパイラは、割り当てが必要になるため、これら 2 つの形式を混合することを禁止します。新しいスライスの。これは Go 言語仕様ではサポートされていません。 「foo への呼び出しの引数が多すぎます」というエラーは、関数シグネチャが単一の可変個引数パラメーターを予期しており、列挙型要素とスライスの両方では満たすことができないことを示します。

この制限により、可変個引数パラメーターはいずれかのパラメータを受け取ることが保証されます。直接スライスするか、列挙された要素を使用して新しく作成したスライスをスライスします。これにより、可変個引数の処理における潜在的な混乱や不一致が防止されます。

Ruby などの言語では、*foo 構文を使用して既存の配列を可変個引数パラメーターに拡張できます。ただし、Go では、列挙要素と可変長引数のスライスが厳密に分離されているため、これは不可能です。

以上がGo の可変個引数関数では列挙型引数とスライスを混在させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。