我刚刚开始使用Scalaz。我正试图在其超类中为我的类型定义一个零。
class Base {
implicit def BaseZ: Zero[this.type] = zero(classOf[this.type].newInstance() )
}
class Child extends Base
~Option(null:Child) //trying to make this produce: new Child
我遇到两个错误:
1)按原样,这会产生"error: class type required but Base.this.type found"
2)如果我将this.type的第二次出现更改为Base(这没用),我得到了
类型不匹配;
发现:基地
必需:Base.this.type
任何人都可以帮我理解this.type在这里出了什么问题吗?我真的不想将类型参数传递或覆盖到Base。
答案 0 :(得分:2)
this.type
与此类的类型不同。 this.type
是此特定实例的单例类型。换句话说,以下内容不起作用:
scala> class X { def x:this.type=new X }
<console>:7: error: type mismatch;
found : X
required: X.this.type
class X { def x:this.type=new X }
另一方面,这将:
scala> class X { def x:this.type=this }
defined class X
从Zeros开始,我创建了一个伴侣对象并将每个零置于其中。