-
Notifications
You must be signed in to change notification settings - Fork 281
Description
I realise it is not intended for use at this point, but thought it might be useful to bring to your attention.
The generics branch works great on go1.18beta1 & go1.18beta2
But on go1.18rc1, it has these errors:
# github.com/deckarep/golang-set
./set.go:169:17: any does not implement comparable
./set.go:172:37: any does not implement comparable
./threadsafe.go:230:43: any does not implement comparable
./threadsafe.go:232:55: any does not implement comparable
./threadsafe.go:235:24: any does not implement comparable
./threadsafe.go:237:44: any does not implement comparable
./threadsafe.go:238:26: any does not implement comparable
./threadsafe.go:249:63: any does not implement comparable
./threadsafe.go:255:72: any does not implement comparable
./threadsafe.go:256:24: any does not implement comparable
./threadsafe.go:256:24: too many errors
I think this is as a consequence of golang/go#50646 (reference)
I've had a good look at it, and made some adjustments which seem to resolve most of it. But I wasn't able to find a way to get PowerSet
working
For Pop
:
func (s *threadUnsafeSet[T]) Pop() (v T, ok bool) {
for item := range *s {
delete(*s, item)
return item, true
}
return
}
(Though this does require a change to the method signature - an alternative might be to introduce a new method and return the zero value on the old one, or to return a pointer)
Edit: For CartesianProduct
, your intended code still seems to have the same problem
For PowerSet
, the problem is that it won't allow Set[Set[T]]
(Set[T] does not implement comparable), and the interface cannot be declared as comparable (interface is (or embeds) comparable)
Perhaps an alternative might be to return []Set[T]
(?)