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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將類型限制為具有索引的類型?

如何將類型限制為具有索引的類型?

Go
aluckdog 2022-11-08 17:09:51
自 1.18 引入泛型以來,我決定深入研究 Go。我想實(shí)現(xiàn)一個(gè)只接受順序類型的算法——數(shù)組、切片、映射、字符串,但我不知道如何破解。是否有一種可以針對涉及可索引性的方法?
查看完整描述

1 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以將約束與聯(lián)合一起使用,但唯一有意義的約束是:


type Indexable interface {

    ~[]byte | ~string

}


func GetAt[T Indexable](v T, i int) byte {

    return v[i]

}

暫時(shí)就是這樣。為什么?

  1. 對具有聯(lián)合約束的類型所允許的操作僅適用于約束類型集中的所有類型。

  2. 要允許索引,聯(lián)合中的類型必須具有相等的鍵類型和相等的元素類型。

  3. 類型參數(shù)提案建議map[int]T可以在與 的聯(lián)合中使用[]T,但是這已被禁止。規(guī)范現(xiàn)在在索引表達(dá)式中提到了這一點(diǎn):“如果 P 的類型集中存在映射類型,則該類型集中的所有類型都必須是映射類型,并且相應(yīng)的鍵類型必須全部相同”。

  4. 對于數(shù)組,長度是類型的一部分,因此聯(lián)合必須指定您想要處理的所有可能的長度,例如[1]T | [2]T等。非常不切實(shí)際,并且容易出現(xiàn)越界問題(有一個(gè)改進(jìn)這一點(diǎn)的建議)。

因此,唯一支持索引的具有多種類型的聯(lián)合似乎是[]byte | string(可能近似~)。由于byte是 的別名uint8,您也可以使用 進(jìn)行實(shí)例化[]uint8。

除此之外,沒有其他方法可以定義支持對所有可能的可索引類型進(jìn)行索引的約束。

注意支持[]byte | string索引但不支持范圍,因?yàn)檫@個(gè)聯(lián)合沒有核心類型。

游樂場:https ://gotipplay.golang.org/p/uatvtMo_mrZ


查看完整回答
反對 回復(fù) 2022-11-08
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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