<p><img src="https://img.php.cn/upload/article/000/887/227/170791165242514.jpg" 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">登入後複製</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">##constraints.ordered<code></code>#。 </a>
</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">登入後複製</div></div>
</p>在 <p>go playground<a href="https://www.php.cn/link/b18336c06954cf0a92113517ca2bdd29" rel="nofollow noreferrer"> 上嘗試。 </a>
</p>它給出了錯誤的結果,因為您從零值開始<p>min<code> 和</code>max<code> ,並且如果傳遞的切片中的所有值都大於或小於零值,則</code>min<code> 或</code>max<code> 將保持零值。 </code>
</p>一個簡單的修正方法是,如果傳遞的切片不為空,則使用第一個值初始化 <p>min<code> 和 </code>max<code>:</code>
<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">登入後複製</div></div>
</p>這將輸出(在 <p>go playground<a href="https://www.php.cn/link/ed7ec77be8029e30e8532d41448d1c52" rel="nofollow noreferrer"> 上嘗試):</a>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">1 9</pre><div class="contentsignin">登入後複製</div></div>
</p>請注意,如果您使用浮點類型,則必須明確處理 <p>nan<code> 值,因為未指定它們與其他浮點數的順序。 </code></p>
以上是無效操作:v > max(類型參數 T 與 > 不可比較)的詳細內容。更多資訊請關注PHP中文網其他相關文章!