型 V の 2 つの値を Go ジェネリックで比較しようとすると機能しません

WBOY
リリース: 2024-02-09 12:39:09
転載
514 人が閲覧しました

尝试比较 V 类型的两个值与 Go 泛型不起作用

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
}
ログイン後にコピー

Solution

V== を許可する comparable である必要があります。
any に変換すると、常に許可される any の間で非汎用 == が使用されるため、効率的に比較できます。

以上が型 V の 2 つの値を Go ジェネリックで比較しようとすると機能しませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!