Я реализую битовый вектор в Go:
// A bit vector uses a slice of unsigned integer values or “words,”
// each bit of which represents an element of the set.
// The set contains i if the ith bit is set.
// The following program demonstrates a simple bit vector type with these methods.
type IntSet struct {
words []uint64 //uint64 is important because we need control over number and value of bits
}
Я определил несколько методов (например, проверка членства, добавление или удаление элементов, операции над множествами, такие как объединение, пересечение и т. Д.).) на нем у всех есть указатель получателя.Вот один из таких методов:
// Has returns true if the given integer is in the set, false otherwise
func (this *IntSet) Has(m int) bool {
// details omitted for brevity
}
Теперь мне нужно возвращать пустой набор, который является истинной константой, чтобы я мог использовать одинаковую константу каждый раз, когда мне нужно обратитьсяна IntSet
, который не содержит элементов.Один из способов - вернуть что-то вроде &IntSet{}
, но я вижу два недостатка:
- Каждый раз, когда должен быть возвращен пустой набор, необходимо выделить новое значение.
- Возвращаемое значение не является на самом деле постоянным, поскольку оно может быть изменено вызывающими.
Как определить нулевой набор , который не имеет этих ограничений?