mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-08-08 16:21:43 +00:00
ch13: fix code path
This commit is contained in:
@@ -22,8 +22,8 @@ fmt.Println(reflect.DeepEqual(c, d)) // "false"
|
||||
|
||||
我們希望在這里實現一個自己的Equal函數,用於比較類型的值。和DeepEqual函數類似的地方是它也是基於slice和map的每個元素進行遞歸比較,不同之處是它將nil值的slice(map類似)和非nil值但是空的slice視作相等的值。基礎部分的比較可以基於reflect包完成,和12.3章的Display函數的實現方法類似。同樣,我們也定義了一個內部函數equal,用於內部的遞歸比較。讀者目前不用關心seen參數的具體含義。對於每一對需要比較的x和y,equal函數首先檢測它們是否都有效(或都無效),然後檢測它們是否是相同的類型。剩下的部分是一個鉅大的switch分支,用於相同基礎類型的元素比較。因爲頁面空間的限製,我們省略了一些相似的分支。
|
||||
|
||||
<u><i>gopl.io/ch13/equal</i></u>
|
||||
```Go
|
||||
gopl.io/ch13/equal
|
||||
func equal(x, y reflect.Value, seen map[comparison]bool) bool {
|
||||
if !x.IsValid() || !y.IsValid() {
|
||||
return x.IsValid() == y.IsValid()
|
||||
@@ -125,5 +125,3 @@ fmt.Println(Equal(a, c)) // "false"
|
||||
**練習 13.1:** 定義一個深比較函數,對於十億以內的數字比較,忽略類型差異。
|
||||
|
||||
**練習 13.2:** 編寫一個函數,報告其參數是否循環數據結構。
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user