第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無效操作:在對任意維度的切片建模時無法索引 T

無效操作:在對任意維度的切片建模時無法索引 T

Go
慕姐4208626 2023-01-03 16:19:42
我正在嘗試使用未知大小的矩陣進行矩陣減法。這是代碼:type ArrayLike interface {    []interface{} | [][]interface{} | [][][]interface{} | [][][][]interface{}}func subMatrix[T ArrayLike](A, B T, shape []int) interface{} {    dim := shape[0]    if len(shape) == 1 {        retObj := make([]interface{}, dim)        for i := 0; i < dim; i++ {            Av := A[i].(float64)            Bv := B[i].(float64)            retObj[i] = Av - Bv        }        return retObj    } else {        retObj := make([]interface{}, dim)        for i := 0; i < dim; i++ {            retObj[i] = subMatrix(Av[i], Bv[i], shape[1:])        }        return retObj    }}它抱怨無效操作:無法索引 A(受 []interface{}|[][]interface{}|[][][]interface{}|[][][][]interface{} 約束的類型 T 的變量)compilerNonIndexableOperand有誰知道如何做這項工作?
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經(jīng)驗 獲得超9個贊

您不能這樣做,不能使用泛型,也不能單獨使用interface{}/ 。any主要問題是您不能對具有任意維度(即任意類型)的切片進行靜態(tài)建模。讓我們按順序進行:

您收到的錯誤消息是因為您無法使用這樣的聯(lián)合約束來索引類型參數(shù)。規(guī)格,索引表達式

對于類型參數(shù)類型 P:

  • [...]

  • P 的類型集中所有類型的元素類型必須相同。[...]

ArrayLike的類型集的元素類型相同。的元素類型[]interface{}interface{},其中之一[][]interface{}[]interface{}等等。

此處概述了索引錯誤的安慰劑解決方案A,基本上它涉及將參數(shù)類型更改為Bslice []T。然后你可以索引A[i]B[i]。

然而這還不夠。此時,無法將正確的參數(shù)傳遞給遞歸調(diào)用。表情的類型A[i]是現(xiàn)在T,而是subMatrix想要[]T。

即使刪除類型參數(shù)并聲明 argsABasany也不起作用,因為在遞歸調(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]

        }

    }

}


查看完整回答
反對 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號