首頁 > 後端開發 > Golang > 無效操作:v > max(類型參數 T 與 > 不可比較)

無效操作:v > max(類型參數 T 與 > 不可比較)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2024-02-14 19:54:09
轉載
666 人瀏覽過
<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中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板