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

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

使用地圖時(shí)出現(xiàn) 1.18 通用編譯錯(cuò)誤。使用結(jié)構(gòu)鍵在地圖上復(fù)制

使用地圖時(shí)出現(xiàn) 1.18 通用編譯錯(cuò)誤。使用結(jié)構(gòu)鍵在地圖上復(fù)制

Go
回首憶惘然 2022-11-28 14:39:43
我實(shí)現(xiàn)了一個(gè)基于泛型的 Set,一切正常,直到我使用 struct 作為 Set 元素而不是基類型。我有一個(gè)編譯錯(cuò)誤。去版本:go version go1.18 windows/amd64下面的代碼在功能上不符合要求AddSet。package mainimport (    "fmt"    "golang.org/x/exp/maps")type Key struct {    A, B int}func main() {    s := SetOf(        Key{1, 1},        Key{2, 2},        Key{3, 3},    )    s.AddSet(SetOf(        Key{3, 3},        Key{4, 4},        Key{5, 5},    ))    fmt.Println(s)}type Set[T comparable] map[T]struct{}func SetOf[T comparable](vs ...T) Set[T] {    s := Set[T]{}    for _, v := range vs {        s[v] = struct{}{}    }    return s}func (s Set[T]) AddSet(another Set[T]) {    maps.Copy(s, another)}運(yùn)行時(shí):> go run .\main.go# command-line-arguments.\main.go:19:10: cannot use &.autotmp_29 (type *struct { A int; B int }) as type *Key in argument to runtime.mapassign<autogenerated>:1: cannot use &.autotmp_12 (type *struct { A int; B int }) as type *Key in argument to runtime.mapassign如果Key只有1個(gè)字段,則可以編譯成功。如果我使用for v := range another { s[v]=struct{}{} },它可以編譯成功。我覺得很奇怪,有人可以解釋一下嗎?
查看完整描述

1 回答

?
阿波羅的戰(zhàn)車

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

看起來像這個(gè)編譯器錯(cuò)誤。它在 Go 1.19 中得到修復(fù)并向后移植到 Go 1.18.2。


如果您使用的是舊版本,我建議maps您像您已經(jīng)嘗試過的那樣,簡單地放棄軟件包并手動(dòng)執(zhí)行操作。這只是一個(gè)簡單的循環(huán):


func (s Set[T]) AddSet(another Set[T]) {

    for k := range another {

        s[k] = struct{}{}

    }

}

@icza 將命名映射類型顯式轉(zhuǎn)換為其基礎(chǔ)類型的注釋也有效:


maps.Copy(map[T]struct{}(s), another)

如果您使用需要多個(gè)映射類型參數(shù)(具有相同約束)的函數(shù),如maps.Equalor maps.EqualFunc,您必須轉(zhuǎn)換兩個(gè)參數(shù):


func (s Set[T]) Compare(another Set[T]) bool {

    // signature is Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool

    return maps.Equal(map[T]struct{}(s), map[T]struct{}(another))

}

似乎用 len >= 2 的數(shù)組實(shí)例化的參數(shù)化映射類型也重現(xiàn)了崩潰。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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