我開始使用 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中文網其他相關文章!