scalaz Zero在基类中定义

时间:2012-10-04 22:12:07

标签: scala types scalaz

我刚刚开始使用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。

1 个答案:

答案 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开始,我创建了一个伴侣对象并将每个零置于其中。