练习 7.1: 使用来自 ByteCounter 的思路,实现一个针对单词和行数的计数器。
网上看的一个答案
func main() {
s := "Hello, World!\nHello, 世界!"
var wc WordCounter
fmt.Fprintf(&wc, s)
fmt.Println(wc)
var lc LineCounter
fmt.Fprintf(&lc, s)
fmt.Println(lc)
}
type WordCounter int
func (c *WordCounter) Write(p []byte) (int, error) {
scanner := bufio.NewScanner(bytes.NewReader(p))
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
*c++
}
return len(p), nil
}
type LineCounter int
func (c *LineCounter) Write(p []byte) (int, error) {
scanner := bufio.NewScanner(bytes.NewReader(p))
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
*c++ // 如果注释了这儿 那么 len(p) 返回结果是 0
}
return len(p), nil
}
*c++
len(p) 返回结果是 0 呢?-
1
MoYi123 2021-11-23 14:59:19 +08:00
`return len(p), nil` 是 fmt.Fprintf 的返回值,又不是 lc 的值
|
2
Vegetable 2021-11-23 15:11:21 +08:00
fmt.Println(lc)是在输出 lc ,也就是内部的*c ,不是"len(p)"
|
3
thevita 2021-11-23 15:20:25 +08:00 1
对神经有疑问应该问神学家,我们没有解释权
|