マップのファンクション キー
この記事では、Go プログラミング言語でマップ キーとして関数を使用する場合の制限について説明します。
問題
次の仮定の Go コードを考えてみましょう:
type Action func(int) func test(a int) { } func test2(a int) { } func main() { x := map[Action]bool{} x[test] = true x[test2] = false }
このコードをコンパイルしようとすると、「無効なマップ キー」を示すエラーが発生します。 type Action."
答え
Go 言語仕様では、関数、マップ、およびスライスをマップ キーとして使用することを明示的に禁止しています。具体的には、仕様では次のように述べられています。
「比較演算子 == および != は、キー タイプのオペランドに対して完全に定義されている必要があります。したがって、キー タイプは関数、マップ、またはスライスであってはなりません。」
この制限が設けられているのは、等価比較演算子 (== および !=) がキー タイプに対して明確に定義されている必要があるためです。関数、マップ、スライスは、等価比較が完全に定義されていないため、適切なキー タイプではありません。
結論
関数をマップ キーとして使用したくなるかもしれませんが、 、明確に定義された等価比較が必要なため、Go では許可されていません。したがって、文字列、整数、構造体などの他の適切な型をマップ キーとして使用する必要があります。
以上がGo で関数をマップ キーとして使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。