日常 Go語言聖經 匿名函式習題

2021-09-07 17:54:27 字數 2583 閱讀 4383

go語言聖經-匿名函式

1.擁有函式名的函式只能在包級語法塊中被宣告,通過函式字面量(function literal),我們可繞過這一限制,在任何表示式中表示乙個函式值

2.通過這種方式定義的函式可以訪問完整的詞法環境(lexical environment),這意味著在函式中定義的內部函式可以引用該函式的變數

3.函式值不僅僅是一串**,還記錄了狀態,意味著匿名函式和父函式中,存在變數引用,函式值屬於引用型別和函式值不可比較的原因。go使用閉包(closures)技術實現函式值,go程式設計師也把函式值叫做閉包

4.給定一些計算機課程,每個課程都有前置課程,只有完成了前置課程才可以開始當前課程的學習,這類問題被稱作拓撲排序。從概念上說,前置條件可以構成有向圖。

練習5.10: 重寫toposort函式,用map代替切片並移除對key的排序**。驗證結果的正確性(結果不唯一)。

練習5.12: gopl.io/ch5/outline2(5.5節)的startelement和endelement共用了全域性變數depth,將它們修改為匿名函式,使其共享outline中的區域性變數。

練習5.10: 重寫toposort函式,用map代替切片並移除對key的排序**。驗證結果的正確性(結果不唯一)。

*/func toposort2(m map[string]string) map[int]string }}

var keys string

for key := range m

visitall(keys)

return order

}func toposort(m map[string]string) string }}

var keys string

for key := range m

sort.strings(keys)

visitall(keys)

return order}/*

等著去看資料結構再看這個題

*//*

練習5.12: gopl.io/ch5/outline2(5.5節)的startelement和endelement共用了全域性變數depth,將它們修改為匿名函式,使其共享outline中的區域性變數。

*/func outline(url string) (string, error)

doc, _ := html.parse(resp.body)

//使用匿名函式實現

var depth int

var startelement func(n *html.node)

var endelement func(n *html.node)

startelement = func(n *html.node)

fmt.printf("%*s

depth++

}if n.type == html.elementnode && n.firstchild == nil && n.data != "script" else if n.type == html.elementnode

if n.type == html.textnode

}endelement = func(n *html.node)

if n.type == html.elementnode

}//1.使用函式值

日常 Go語言聖經 匿名函式習題

go語言聖經 匿名函式 1.擁有函式名的函式只能在包級語法塊中被宣告,通過函式字面量 function literal 我們可繞過這一限制,在任何表示式中表示乙個函式值 2.通過這種方式定義的函式可以訪問完整的詞法環境 lexical environment 這意味著在函式中定義的內部函式可以引用該...

日常 Go語言聖經 Map習題

練習 4.8 修改charcount程式,使用unicode.isletter等相關的函式,統計字母 數字等unicode中不同的字元類別。練習 4.9 編寫乙個程式wordfreq程式,報告輸入文字中每個單詞出現的頻率。在第一次呼叫scan前先呼叫input.split bufio.scanwor...

日常 Go語言聖經 競爭條件習題

package main import fmt sync var balance int func deposit amount int func balance int 問題 1.在alice執行期間 balance balance amount 這一步運算可能會被bob中間擠占 2.當執行到ba...