Der Versuch, zwei Werte vom Typ V mit Go-Generika zu vergleichen, funktioniert nicht

WBOY
Freigeben: 2024-02-09 12:39:09
nach vorne
515 Leute haben es durchsucht

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

PHP-Editor Apple hat festgestellt, dass in der Go-Sprache zwei Werte vom Typ V bei Verwendung von Generika nicht direkt verglichen werden können. Dies bedeutet, dass Vergleiche nicht einfach mit == oder != durchgeführt werden können, wie dies bei Zeichenfolgen oder Ganzzahlen der Fall ist. Dies liegt daran, dass Generika unterschiedlich implementiert sind und Werte nicht direkt vergleichen können. In diesem Fall müssen wir eine benutzerdefinierte Vergleichsfunktion oder -methode verwenden, um den Vergleichsvorgang durchzuführen und die von uns benötigte Funktionalität zu erreichen. Dies ist ein Detail, auf das Sie achten sollten, insbesondere beim Schreiben von Code mit Generika.

Frageninhalt

Go-Version: go1.21rc2

Ich schreibe in Go eine Funktion mit Generika, die einen Wert annimmt und wahr/falsch zurückgibt, wenn sich der Wert in einer Karte befindet.

In der folgenden Version 1 verstehe ich nicht, warum es jetzt funktioniert, wenn beide Werte vom Typ sind any时无法比较?但是在版本 2 中转换为 any ... Ich glaube, ich übersehe etwas Offensichtliches, aber ich verstehe das nicht ganz.

Version 1 (funktioniert nicht):

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
}
Nach dem Login kopieren

Version 2 (funktioniert):

func InValues[M ~map[K]V, K comparable, V any](m M, v V) bool {
    for _, x := range maps.Values(m) {
        if any(x) == any(v) {
            return true
        }
    }
    return false
}
Nach dem Login kopieren

Lösung

V 需要是 comparable 才能允许 ==.
Konvertieren Sie in any 然后比较有效,因为它在 any 之间使用非通用 == , was immer erlaubt ist.

Das obige ist der detaillierte Inhalt vonDer Versuch, zwei Werte vom Typ V mit Go-Generika zu vergleichen, funktioniert nicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!