2015-03-06 21 views
5

'da özellik yöntemini kullanma Özelliği olan bir özelliği ve bir sınıfı var.Sınıf yapıcısı

trait A { 
    def a = "" 
} 

class B(s: String) extends A { 
    def b = a 
} 

Ancak böyle yapıcısında Sürekli yöntemi kullanırken,: o

trait A { 
    def a = "" 
} 

class B(s: String) extends A { 
    def this() = this(a) 
} 

aşağıdaki hata görünür:

error: not found: value a 
aşağıdaki gibi özellik metotlarını kullanabilir

Özellikdeki sınıfların oluşturulması için varsayılan parametreleri tanımlamanın bir yolu var mı?

DÜZENLEME: Orada akka-test kiti olup:

class TestKit(_system: ActorSystem) extends { implicit val system = _system } 

Ve her test şuna benzer: amacını açıklamak için ben ortak oluşturulmasını oluşturmak istiyorum çünkü

class B(_system: ActorSystem) extends TestKit(_system) with A with ... { 
    def this() = this(actorSystem) 
    ... 
} 

A:

trait A { 
    val conf = ... 
    def actorSystem = ActorSystem("MySpec", conf) 
    ... 
} 
+0

: buldum basit çözüm fabrika yöntemi olarak uygulamak ile sınıf B için bir refakatçi nesne tanımlamaktır. Sınıf elemanı, dairesel referanslamaya izin verecek olan yapıcı parametrelerine bağlı olabilir (ve genellikle yapar?). Yani 'a' henüz başlatılmamış. –

cevap

3

A Scala başlatma siparişi nedeniyle zor. Sana bir sınıf üyesi bağlıdır bir yapıcı parametresi olabilir nasıl görmüyorum

trait A { 
    def a = "aaaa" 
} 

class B(s: String) { 
println(s) 
} 

object B extends A { 
    def apply() = new B(a) 
    def apply(s: String) = new B(s) 
} 
+0

Güzel bir çözüm, ama sorun şu ki, B 'yeni B() 'olarak adlandırıldı (oluşturulmuş bir kodda bu yüzden değiştiremiyorum) – mirelon