batch replace escape

This commit is contained in:
Xargin
2016-10-18 13:29:52 +08:00
parent 3da62d2c3f
commit d3ce2c9ba6
8 changed files with 15 additions and 15 deletions

View File

@@ -86,7 +86,7 @@ fmt.Println(x.String()) // "{1 9 42 144}"
fmt.Println(x.Has(9), x.Has(123)) // "true false"
```
这里要注意我们声明的String和Has两个方法都是以指针类型*IntSet来作为接收器的但实际上对于这两个类型来说把接收器声明为指针类型也没什么必要。不过另外两个函数就不是这样了因为另外两个函数操作的是s.words对象如果你不把接收器声明为指针对象那么实际操作的是拷贝对象而不是原来的那个对象。因此因为我们的String方法定义在IntSet指针上所以当我们的变量是IntSet类型而不是IntSet指针时可能会有下面这样让人意外的情况
这里要注意我们声明的String和Has两个方法都是以指针类型`*IntSet`来作为接收器的但实际上对于这两个类型来说把接收器声明为指针类型也没什么必要。不过另外两个函数就不是这样了因为另外两个函数操作的是s.words对象如果你不把接收器声明为指针对象那么实际操作的是拷贝对象而不是原来的那个对象。因此因为我们的String方法定义在IntSet指针上所以当我们的变量是IntSet类型而不是IntSet指针时可能会有下面这样让人意外的情况
```go
fmt.Println(&x) // "{1 9 42 144}"
@@ -94,7 +94,7 @@ fmt.Println(x.String()) // "{1 9 42 144}"
fmt.Println(x) // "{[4398046511618 0 65536]}"
```
在第一个Println中我们打印一个*IntSet的指针这个类型的指针确实有自定义的String方法。第二Println我们直接调用了x变量的String()方法这种情况下编译器会隐式地在x前插入&操作符这样相当远我们还是调用的IntSet指针的String方法。在第三个Println中因为IntSet类型没有String方法所以Println方法会直接以原始的方式理解并打印。所以在这种情况下&符号是不能忘的。在我们这种场景下你把String方法绑定到IntSet对象上而不是IntSet指针上可能会更合适一些不过这也需要具体问题具体分析。
在第一个Println中我们打印一个`*IntSet`的指针这个类型的指针确实有自定义的String方法。第二Println我们直接调用了x变量的String()方法这种情况下编译器会隐式地在x前插入&操作符这样相当远我们还是调用的IntSet指针的String方法。在第三个Println中因为IntSet类型没有String方法所以Println方法会直接以原始的方式理解并打印。所以在这种情况下&符号是不能忘的。在我们这种场景下你把String方法绑定到IntSet对象上而不是IntSet指针上可能会更合适一些不过这也需要具体问题具体分析。
练习6.1: 为bit数组实现下面这些方法