From 916def1c5edac282cab42a992835b0b0f6dbbb17 Mon Sep 17 00:00:00 2001 From: "Stephen M. McQuay" Date: Mon, 3 Sep 2012 21:18:02 -0600 Subject: [PATCH] okay, so I liked the closure way, just prefer this slightly more compact spelling --- exercises/08-ebt/go.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) 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) }