0

私はScalazを始めたばかりです。スーパークラスで自分のタイプの Zero を定義しようとしています。

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

次の 2 つのエラーが発生します。

1)そのまま、これは生成します"error: class type required but Base.this.type found"

2) this.type の 2 番目のオカレンスを Base に変更すると (これは役に立ちません)、次のようになります。

型の不一致;
found : ベース
が必要です: Base.this.type

this.type ここで何が問題なのかを理解してくれる人はいますか? 型パラメーターを Base に渡したりオーバーライドしたりする必要はありません。

4

1 に答える 1

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

ゼロの時点で、コンパニオンオブジェクトを作成し、各ゼロをその中に入れます。

于 2012-10-05T03:14:00.270 に答える