php 編集者 Apple は、Go 言語ではジェネリックスを使用する場合、型 V の 2 つの値を直接比較できないことを発見しました。これは、文字列や整数の場合のように == または != を使用して単純に比較を行うことはできないことを意味します。これは、ジェネリックの実装方法が異なり、値を直接比較できないためです。この場合、必要な機能を実現するには、カスタムの比較関数またはメソッドを使用して比較操作を実行する必要があります。これは、特にジェネリックスを含むコードを作成する場合に注意すべき点です。
goバージョン:go1.21rc2
私は値を受け取り、その値がマップ内にある場合に true/false を返すジェネリックスを使用して go で関数を作成しています。
以下のバージョン 1 では、タイプが any
のときに 2 つの値を比較できない理由がわかりません。しかし、バージョン 2 で any
に変換した後は、機能するようになりました...明らかな何かが欠けていると思いますが、それがよくわかりません。
バージョン 1 (動作しません):
リーリーバージョン 2 (作業中):
func invalues[m ~map[k]v, k comparable, v any](m m, v v) bool { for _, x := range maps.values(m) { if x == v { return true } } return false }
V
は ==
を許可する comparable
である必要があります。
any
に変換すると、常に許可される any
の間で非汎用 ==
が使用されるため、効率的に比較できます。
以上が型 V の 2 つの値を Go ジェネリックで比較しようとすると機能しませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。