ch5: fix code path

This commit is contained in:
chai2010
2016-01-21 09:58:28 +08:00
parent 3666d2f0e8
commit 20a8cf71b9
7 changed files with 19 additions and 18 deletions

View File

@@ -10,8 +10,8 @@ strings.Map(func(r rune) rune { return r + 1 }, "HAL-9000")
更爲重要的是通過這種方式定義的函數可以訪問完整的詞法環境lexical environment這意味着在函數中定義的內部函數可以引用該函數的變量如下例所示
<u><i>gopl.io/ch5/squares</i></u>
```Go
gopl.io/ch5/squares
// squares返迴一個匿名函數。
// 該匿名函數每次被調用時都會返迴下一個數的平方。
func squares() func() int {
@@ -38,8 +38,8 @@ squares的例子證明函數值不僅僅是一串代碼還記録了狀態
接下來,我們討論一個有點學術性的例子,考慮這樣一個問題:給定一些計算機課程,每個課程都有前置課程,隻有完成了前置課程才可以開始當前課程的學習;我們的目標是選擇出一組課程,這組課程必須確保按順序學習時,能全部被完成。每個課程的前置課程如下:
<u><i>gopl.io/ch5/toposort</i></u>
```Go
gopl.io/ch5/toposort
// prereqs記録了每個課程的前置課程
var prereqs = map[string][]string{
"algorithms": {"data structures"},
@@ -121,8 +121,8 @@ visitAll := func(items []string) {
讓我們迴到findLinks這個例子。我們將代碼移動到了links包下將函數重命名爲Extract在第八章我們會再次用到這個函數。新的匿名函數被引入用於替換原來的visit函數。該匿名函數負責將新連接添加到切片中。在Extract中使用forEachNode遍歷HTML頁面由於Extract隻需要在遍歷結點前操作結點所以forEachNode的post參數被傳入nil。
<u><i>gopl.io/ch5/links</i></u>
```Go
gopl.io/ch5/links
// Package links provides a link-extraction function.
package links
import (
@@ -172,8 +172,8 @@ func Extract(url string) ([]string, error) {
下面的函數實現了廣度優先算法。調用者需要輸入一個初始的待訪問列表和一個函數f。待訪問列表中的每個元素被定義爲string類型。廣度優先算法會爲每個元素調用一次f。每次f執行完畢後會返迴一組待訪問元素。這些元素會被加入到待訪問列表中。當待訪問列表中的所有元素都被訪問後breadthFirst函數運行結束。爲了避免同一個元素被訪問兩次代碼中維護了一個map。
<u><i>gopl.io/ch5/findlinks3</i></u>
```Go
gopl.io/ch5/findlinks3
// breadthFirst calls f for each item in the worklist.
// Any items returned by f are added to the worklist.
// f is called at most once for each item.
@@ -219,7 +219,7 @@ func main() {
讓我們從 https://golang.org 開始,下面是程序的輸出結果:
```bash
```
$ go build gopl.io/ch5/findlinks3
$ ./findlinks3 https://golang.org
https://golang.org/