Maison > développement back-end > Golang > Opération invalide : v > max (les paramètres de type T et > ne sont pas comparables)

Opération invalide : v > max (les paramètres de type T et > ne sont pas comparables)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-14 19:54:09
avant
706 Les gens l'ont consulté
<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/170791165242514.jpg" class="lazy" alt="无效操作:v > max(类型参数 T 与 > 不可比较)"></p> <p>php小编苹果在这里为大家解析一种常见的错误信息:"无效操作:v > max(类型参数 T 与 > 不可比较)"。在使用PHP语言编程时,我们可能会遇到这种错误,特别是在比较类型参数时。本文将详细解释这个错误的原因以及如何正确处理,帮助读者更好地理解和解决这个问题。无效操作错误是比较两个不可比较的类型时出现的,解决这个问题的关键是确保比较的类型是可比较的。在下文中,我们将逐步介绍具体的解决方法。</p> <h2 class="daan">问题内容</h2> <p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>package main import ( "fmt" ) func findMinMax[T comparable](arr []T) (min, max T) { for _, v := range arr { if v > max { max = v } else if v < min { min = v } } return min, max } func main() { arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} fmt.Println(findMinMax(arr)) }</pre><div class="contentsignin">Copier après la connexion</div></div> <p>我非常乐意帮助您解决在 findminmax 函数中遇到的问题。错误信息显示v > max 或v < min 表明函数内的比较操作可能存在问题。为了提供精确的解决方案,我需要查看 findminmax 函数的实现。根据您的描述,应该是可比较的类型 t 似乎在比较过程中导致了问题。</p> <p>我期待函数 findminmax 能够正常工作。</p><h2 class="daan">解决方法</h2><p>您对 <code>t</code> 类型参数使用了 <a href="https://www.php.cn/link/422e42d058a41c75062760d7d640debf" rel="nofollow noreferrer"><code>comarable</code></a> 约束。 <code>comparable</code> 的意思是:<em>可比较</em>。因此,您可以对该类型的值使用 <code>==</code> 运算符。这并不意味着它们是<em>有序的</em>,这是使用 <code><</code> <code>></code> 运算符所必需的。</p> <p>有序约束在 <a href="https://www.php.cn/link/b753ced14094e73576b017d9323be362" rel="nofollow noreferrer"><code>golang.org/x/exp/ 中定义constraints</code></a> 包,请参阅 <a href="https://www.php.cn/link/b753ced14094e73576b017d9323be362#ordered" rel="nofollow noreferrer"><code>constraints.ordered</code></a>。 </p> <p>使用您的代码进行编译:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>import ( "fmt" "golang.org/x/exp/constraints" ) func findminmax[t constraints.ordered](arr []t) (min, max t) { for _, v := range arr { if v > max { max = v } else if v < min { min = v } } return min, max }</pre><div class="contentsignin">Copier après la connexion</div></div> <p>在 <a href="https://www.php.cn/link/b18336c06954cf0a92113517ca2bdd29" rel="nofollow noreferrer">go playground</a> 上尝试一下。</p> <p>它给出了错误的结果,因为您从零值开始 <code>min</code> 和 <code>max</code> ,并且如果传递的切片中的所有值都大于或小于零值,则 <code>min</code> 或 <code>max</code> 将保持零值。</p> <p>一个简单的修复方法是,如果传递的切片不为空,则使用第一个值初始化 <code>min</code> 和 <code>max</code>:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>func findminmax[t constraints.ordered](arr []t) (min, max t) { if len(arr) > 0 { min, max = arr[0], arr[0] } for _, v := range arr { if v > max { max = v } else if v < min { min = v } } return min, max }</pre><div class="contentsignin">Copier après la connexion</div></div> <p>这将输出(在 <a href="https://www.php.cn/link/ed7ec77be8029e30e8532d41448d1c52" rel="nofollow noreferrer">go playground</a> 上尝试):</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>1 9</pre><div class="contentsignin">Copier après la connexion</div></div> </p> <p>请注意,如果您使用浮点类型,则必须显式处理 <code>nan</code> 值,因为未指定它们与其他浮点数的顺序。</p>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal