0

如果我有这个代码:

package main

import (
   "strings"
   "text/scanner"
)

func main() {
   src := strings.NewReader("hello\nworld\n")
   var s scanner.Scanner
   s.Init(src)
   s.IsIdentRune = func(ch rune, i int) bool {
      return ch != '\n'
   }
   s.Whitespace = 1<<'\n'
   for s.Scan() != scanner.EOF {
      println(s.TokenText())
   }
}

该程序将打印这两行,但它只是永远挂起。我在文档中看到了这一点:

有效字符集不得与空白字符集相交。

但似乎我正在遵循给定的方向。我究竟做错了什么?

  1. https://godocs.io/text/scanner#Scanner.IsIdentRune
4

1 回答 1

0

IsIdentRune在输入结束时使用scanner.EOF调用。不要接受scanner.EOF 作为标识符符文。

s.IsIdentRune = func(ch rune, i int) bool {
    return ch != scanner.EOF && ch != '\n'
}
于 2022-01-30T03:37:50.533 回答