英文:
golang static check whether implement interface with type parameter
问题
没有类型参数,我们可以使用这种方式来检查类型是否实现了接口。
type R struct{}
func (r R) Read([]byte) (int, error)
var _ io.Reader = R{}
如何使用类型参数进行静态检查?
例如:
type Comparator[T any] interface {
// a.Compare(b) =>
// -1 : a < b
// 0 : a == b
// 1 : a > b
Compare(t T) int
Equal(t T) bool
}
type SortArray[E Comparator[E]] interface {
BinarySearch(e E) (int, error)
}
type MyArray[E Comparator[E]] struct{
inner []E
}
func (*MyArray[E]) BinarySearch(e E) (int, error)
如何在编译时检查*MyArray
是否实现了SortArray
接口?
英文:
without type parameter, we can use this to check type whether impl interface.
type R struct{}
func (r R) Read([]byte) (int, error)
var _ io.Reader = R{}
how do this static check with type parameter ?
e.g
type Comparator[T any] interface {
// a.Compare(b) =>
// -1 : a < b
// 0 : a == b
// 1 : a > b
Compare(t T) int
Equal(t T) bool
}
type SortArray[E Comparator[E]] interface {
BinarySearch(e E) (int, error)
}
type MyArray[E Comparator[E]] struct{
inner []E
}
func (*MyArray[E]) BinarySearch(e E) (int, error)
how check whether *MyArray
impl SortArray
when compile time?
答案1
得分: 0
你需要使用一个类型为X
的Comparator
来实例化*MyArray[X]
。
type testComparator struct {
Comparator[testComparator]
}
var _ SortArray[testComparator] = &MyArray[testComparator]{}
英文:
You need to instantiate *MyArray[X]
with a type X
that is a Comparator
.
type testComparator struct {
Comparator[testComparator]
}
var _ SortArray[testComparator] = &MyArray[testComparator]{}
答案2
得分: 0
不需要定义一个实现Comparator[T]
的类型。
type Comparator[T any] interface {
// a.Compare(b) =>
// -1 : a < b
// 0 : a == b
// 1 : a > b
Compare(t T) int
Equal(t T) bool
}
type SortArray[E Comparator[E]] interface {
BinarySearch(e E) (int, error)
}
type MyArray[E Comparator[E]] struct{
inner []E
}
func (*MyArray[E]) BinarySearch(e E) (int, error){
return 0, nil
}
func _[E Comparator[E]]() SortArray[E]{
var arr MyArray[E]
return &arr
}
英文:
no need to define a type which impl Comparator[T]
.
type Comparator[T any] interface {
// a.Compare(b) =>
// -1 : a < b
// 0 : a == b
// 1 : a > b
Compare(t T) int
Equal(t T) bool
}
type SortArray[E Comparator[E]] interface {
BinarySearch(e E) (int, error)
}
type MyArray[E Comparator[E]] struct{
inner []E
}
func (*MyArray[E]) BinarySearch(e E) (int, error){
return 0, nil
}
func _[E Comparator[E]]() SortArray[E]{
var arr MyArray[E]
return &arr
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论