1 回答

TA貢獻1873條經(jīng)驗 獲得超9個贊
您不能這樣做,不能使用泛型,也不能單獨使用interface{}
/ 。any
主要問題是您不能對具有任意維度(即任意類型)的切片進行靜態(tài)建模。讓我們按順序進行:
您收到的錯誤消息是因為您無法使用這樣的聯(lián)合約束來索引類型參數(shù)。規(guī)格,索引表達式:
對于類型參數(shù)類型 P:
[...]
P 的類型集中所有類型的元素類型必須相同。[...]
ArrayLike
的類型集的元素類型不相同。的元素類型[]interface{}
是interface{}
,其中之一[][]interface{}
是[]interface{}
等等。
此處概述了索引錯誤的安慰劑解決方案A
,基本上它涉及將參數(shù)類型更改為B
slice []T
。然后你可以索引A[i]
和B[i]
。
然而這還不夠。此時,無法將正確的參數(shù)傳遞給遞歸調(diào)用。表情的類型A[i]
是現(xiàn)在T
,而是subMatrix
想要[]T
。
即使刪除類型參數(shù)并聲明 argsA
和B
asany
也不起作用,因為在遞歸調(diào)用中您仍然希望對它們進行索引。為了索引,您必須斷言any
某些可索引的東西,但那會是什么?在每次遞歸時,類型都會少一個維度,因此靜態(tài)類型的斷言最終會崩潰。
解決這個問題的唯一方法是(可能?)反思,但老實說,我沒有看到這樣做的實用工具。
您可以而且應(yīng)該為每個矩陣維度編寫一個通用函數(shù):
import "golang.org/x/exp/constraints"
type Number interface {
constraints.Integer | constraints.Float
}
func Sub2DMatrix[T Number](a, b [][]T) {
for i := range a {
for j := range a[i] {
a[i][j] -= b[i][j]
}
}
}
- 1 回答
- 0 關(guān)注
- 94 瀏覽
添加回答
舉報