2012-10-04 3 views
0

저는 스칼라즈를 시작했습니다. 수퍼 클래스에서 내 형식에 대해 0을 정의하려고합니다.스칼라 제로는 기본 클래스로 정의되었습니다.

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.this.type

사람이 나를 this.type 여기에 잘못 무슨 일이 일어나고 있는지 이해하는 데 도움이

를? Base에 형식 매개 변수를 전달하거나 재정의해야하는 것을 정말로 원하지 않습니다.

답변

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 

영점의로서, 나는 동반자 객체를 생성하고 각각의 영을 넣어 것 .

+0

그래서 Base를 확장하는 각 Child의 0이 새로운 Child를 생성해야한다고 말하는 방법이 없습니까? – scalapeno

+0

매니페스트를 사용해 볼 수 있습니다 – pedrofurla

+0

어떻게 이것을 수행하려면 매니 페스트를 사용합니까? – scalapeno