strset icon indicating copy to clipboard operation
strset copied to clipboard

Pointer receiver on Clear

Open vdemario opened this issue 7 years ago • 1 comments

The coexistence of (s Set) and (s *Set) can cause problems. For instance, if a consumer of the library were to create an interface to represent a subset of methods Clear can't go on the same interface as the other methods since Set and *Set are treated as two different types.

There are a few ways to handle this:

  1. The implementation of Clear could be replaced by a slower version that calls Pop until the Set is empty.
  2. Clearcould be removed altogether, leaving the consumer to implement a for loop calling Pop if necessary.
  3. Alternatively, all other methods could be changed to use *Set. This may seem heavy handed at first but since it's not necessary to explicitly take the pointer of a Set variable to call *Set methods this incurs no penalty on the consumer. If #1 is implemented it would be a nice symmetry to have the mutable type use a pointer and the immutable type avoid it.

vdemario avatar Jul 24 '18 20:07 vdemario

I like option two. The set could be cleared simply with s = Make()

rjfonseca avatar Oct 10 '18 22:10 rjfonseca