亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

嵌套泛型類型:重用函數的 Type 參數

嵌套泛型類型:重用函數的 Type 參數

Go
qq_遁去的一_1 2023-02-21 12:39:04
給定以下定義:type Collector[T, C any] interface {    Collect(T, C) C}type mapCollector[K comparable, V any] struct {    GetKey func(result V) K}func (m *mapCollector[K, V]) Collect(value V, c *sync.Map) *sync.Map {    c.Store(m.GetKey(value), value)    return c}我正在嘗試為mapCollector. 這不起作用func MakeUserMapCollector[K UserId, V User]() *mapCollector[K, V] {    c := mapCollector[K, V]{        GetKey: func(user V) K {            return user.getId()        }    }    return &c}相反,我必須重復func MakeUserMapCollector() *mapCollector[UserId, User] {    c := mapCollector[UserId, User]{        GetKey: func(user User) UserId {            return user.getId()        }    }}有沒有辦法重用MakeUserMapCollector類型參數在函數中聲明類型?
查看完整描述

1 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

您可以創建一個通用構造函數,它接受一個用于“集合”的函數,然后將其傳遞給您的mapCollector結構。


這看起來像這樣:


func MakeUserMapCollector[K comparable, V any](collect func(result V) K) *mapCollector[K, V] {

    return &mapCollector[K, V]{

        GetKey: collect,

    }

}

然后你可以用你的類型作為類型參數和你的“集合”函數調用構造函數:


mc := MakeUserMapCollector[UserId, User](func(result User) UserId { return result.GetId() })

完整示例(Go Playground):


package main


import (

    "fmt"

)


type mapCollector[K comparable, V any] struct {

    GetKey func(result V) K

}


func (m mapCollector[K, V]) Collect(result V) K {

    return m.GetKey(result)

}


type UserId string


type User struct {

    Id UserId

}


func (u User) GetId() UserId {

    return u.Id

}


func MakeUserMapCollector[K comparable, V any](collect func(result V) K) *mapCollector[K, V] {

    return &mapCollector[K, V]{

        GetKey: collect,

    }

}


func main() {

    u := User{

        Id: "12",

    }


    mc := MakeUserMapCollector[UserId, User](func(result User) UserId { return result.GetId() })

    fmt.Println(mc.Collect(u))

}


查看完整回答
反對 回復 2023-02-21
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號