第12章,部分字词修订。

This commit is contained in:
zhliner
2017-08-24 22:31:28 +08:00
parent 560d22cccc
commit ed194fc3cf
4 changed files with 9 additions and 9 deletions

View File

@@ -74,7 +74,7 @@ func display(path string, v reflect.Value) {
让我们针对不同类型分别讨论。
**Slice和数组** 两种的处理逻辑是一样的。Len方法返回slice或数组值中的元素个数Index(i)活动索引i对应的元素返回的也是一个reflect.Value如果索引i超出范围的话将导致panic异常这与数组或slice类型内建的len(a)和a[i]操作类似。display针对序列中的每个元素递归调用自身处理我们通过在递归处理时向path附加“[i]”来表示访问路径。
**Slice和数组** 两种的处理逻辑是一样的。Len方法返回slice或数组值中的元素个数Index(i)获得索引i对应的元素返回的也是一个reflect.Value如果索引i超出范围的话将导致panic异常这与数组或slice类型内建的len(a)和a[i]操作类似。display针对序列中的每个元素递归调用自身处理我们通过在递归处理时向path附加“[i]”来表示访问路径。
虽然reflect.Value类型带有很多方法但是只有少数的方法能对任意值都安全调用。例如Index方法只能对Slice、数组或字符串类型的值调用如果对其它类型调用则会导致panic异常。
@@ -218,9 +218,9 @@ c.Value = 42
许多Go语言程序都包含了一些循环的数据。让Display支持这类带环的数据结构需要些技巧需要额外记录迄今访问的路径相应会带来成本。通用的解决方案是采用 unsafe 的语言特性我们将在13.3节看到具体的解决方案。
带环的数据结构很少会对fmt.Sprint函数造成问题因为它很少尝试打印完整的数据结构。例如当它遇到一个指针的时候它只是简单打印指针的数字值。在打印包含自身的slice或map时可能卡住但是这种情况很罕见不值得付出为了处理回环所需的开销。
带环的数据结构很少会对fmt.Sprint函数造成问题因为它很少尝试打印完整的数据结构。例如当它遇到一个指针的时候它只是简单打印指针的数字值。在打印包含自身的slice或map时可能卡住但是这种情况很罕见不值得付出为了处理回环所需的开销。
**练习 12.1** 扩展Displayhans使它可以显示包含以结构体或数组作为map的key类型的值。
**练习 12.1** 扩展Display函数使它可以显示包含以结构体或数组作为map的key类型的值。
**练习 12.2** 增强display函数的稳健性通过记录边界的步数来确保在超出一定限制放弃递归。在13.3节,我们会看到另一种探测数据结构是否存在环的技术。)
**练习 12.2** 增强display函数的稳健性通过记录边界的步数来确保在超出一定限制放弃递归。在13.3节,我们会看到另一种探测数据结构是否存在环的技术。)