diff --git a/exercises/08-ebt/go.go b/exercises/08-ebt/go.go index 48e9c39..ffb3208 100644 --- a/exercises/08-ebt/go.go +++ b/exercises/08-ebt/go.go @@ -4,18 +4,21 @@ import ( "code.google.com/p/go-tour/tree" "fmt" ) -func walk(t *tree.Tree, ch chan int) { - if t != nil { - walk(t.Left, ch) - ch <- t.Value - walk(t.Right, ch) - } -} // Walk walks the tree t sending all values // from the tree to the channel ch. func Walk(t *tree.Tree, ch chan int) { - walk(t, ch) + // do it as a nested closure so that I can control the call to close so + // that I can use the range-based forloop in main.main + var walk func(t *tree.Tree) + walk = func(t *tree.Tree) { + if t == nil { + walk(t.Left) + ch <- t.Value + walk(t.Right) + } + } + walk(t) close(ch) }