首頁 >後端開發 >Golang >將具有精確約束的類型參數傳遞給具有該參數的函數?

將具有精確約束的類型參數傳遞給具有該參數的函數?

WBOY
WBOY轉載
2024-02-05 23:48:11624瀏覽

將具有精確約束的類型參數傳遞給具有該參數的函數?

問題內容

我開始使用 go 泛型,但很難理解為什麼這段程式碼無法編譯:

func f(string) {}

func xyz[T string](p T) {
    f(p) // Error! Cannot use 'p' (type T) as the type string
}

在函數xyz中,為什麼不能假設t存在型別約束使得t為字串型?

我知道我可以簡單地寫 f(string(p)),但我仍然對問題的答案感興趣。


正確答案


這是因為可分配性的規則,在您的具體情況下,這是最後一個規則.

v 是一個類型參數,t 不是一個命名類型,並且 v 類型集中的每個類型的值都可以指派給 t。

類型string 是一個命名類型,因此,儘管t 類型集中的每個類型都可指派給string,但類型參數t 本身不可指派給string

您可以將其與未命名類型進行比較。

func f([]string) {}

func xyz[T []string](p T) {
    f(p) // no issue
}

以上是將具有精確約束的類型參數傳遞給具有該參數的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除