]> Cypherpunks repositories - gostls13.git/commitdiff
container/list: make Remove return Value of removed element.
authorRoger Peppe <rogpeppe@gmail.com>
Tue, 9 Nov 2010 16:58:23 +0000 (08:58 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 9 Nov 2010 16:58:23 +0000 (08:58 -0800)
When it is known that there is already at least one element in the
list, it is awkwardly verbose to use three lines and an extra
variable declaration to remove the first or last item (a common
case), rather than use a simple expression.

a stack:
stk.PushFront(x)
x = stk.Front().Remove().(T)

vs.
stk.PushFront(x)
e := stk.Front()
e.Remove()
x = e.Value.(T)
[An alternative CL might be to add PopFront and PopBack methods].

R=gri
CC=golang-dev
https://golang.org/cl/3000041

src/pkg/container/list/list.go

index ddc8611819a90d5df30098b70cf9d936299cc4f9..c1ebcddaa7afadaf2b2f5dd98554a9d1de18e2dd 100644 (file)
@@ -54,10 +54,12 @@ func (l *List) Front() *Element { return l.front }
 // Back returns the last element in the list.
 func (l *List) Back() *Element { return l.back }
 
-// Remove removes the element from the list.
-func (l *List) Remove(e *Element) {
+// Remove removes the element from the list
+// and returns its Value.
+func (l *List) Remove(e *Element) interface{} {
        l.remove(e)
        e.list = nil // do what remove does not
+       return e.Value
 }
 
 // remove the element from the list, but do not clear the Element's list field.