birdshover

自己做分词,一般选择继承Tokenizer类。在以前的版本中只需要重写Next()方法就可以了。这个类比较简单,而塔的父类TokenStream则更加简单了,和接口没什么两样:

 

//2.1版
public abstract class TokenStream
    {
        
/// <summary>Returns the next token in the stream, or null at EOS. </summary>
        public abstract Token Next();
        
        
/// <summary>Releases resources associated with this stream. </summary>
        public virtual void  Close()
        {
        }
    }

 

 

到了2.3.1版本中,这个抽象类发生了很多变化.下面是2.3.1版的TokenStream类代码。

 

Code

 

 

可以看到,2.3.1版本中多了一个Reset方法和一个Next方法的重载。

在它的子类中重写了Reset和Close方法,但是Next方法没有变化。

 

Code

 

如果,你建立一个类,继承自Tokenizer类,然后,这个时候你做其他事情去了,然后等你回来,你写了调用的代码,嘿嘿,问题来了。会报一个堆栈溢出错误。而你根本不知道这个错误是怎么产生的。这个父类写得太不厚道了,虽然Next方法是必然被重写掉的。

 

 

分类:

技术点:

相关文章:

  • 2021-12-06
  • 2021-12-06
  • 2021-06-21
  • 2021-12-30
  • 2021-09-14
  • 2021-11-06
  • 2021-10-05
  • 2021-09-14
猜你喜欢
  • 2021-09-14
  • 2021-10-14
  • 2021-08-27
  • 2021-11-23
  • 2021-08-23
  • 2021-08-13
  • 2021-11-14
相关资源
相似解决方案