Scala'da, bir içeriğin karıştırıldığı sınıfın adlandırılmış bir yapıcı argümanına başvurması mümkün mü? Aşağıdaki kod, ModuleDao'nun yapıcı argümanı, özellikte tanımlandığı gibi bir değer olmadığı için derlenmez. Yapıcı argümanını herkese açık hale getirmek için val
eklediğimde, özelliktekiyle eşleşir ve derler, ancak bunu val
olarak ayarlamamayı tercih ederim. Bir val yapma ile tek endişesi görünürlük iseBir kurgundan bir argüman argümanı referansı
trait Daoisms {
val sessionFactory:SessionFactory
protected def session = sessionFactory.getCurrentSession
}
class ModuleDao(sessionFactory:SessionFactory) extends Daoisms {
def save(module:Module) = session.saveOrUpdate(module)
}
/* Compiler error:
class ModuleDao needs to be abstract, since value sessionFactory in trait Daoisms of type org.hibernate.SessionFactory is not defined */
// This works though
// class ModuleDao(val sessionFactory:SessionFactory) extends Daoisms { ... }
Neden bir 'val' olarak ayarlamak? Bunu zaten "Daoism" üzerinde yapıyorsun, o yüzden neden 'ModuleDao' de yapmıyorsun? Sorun şu ki, bildirdiğiniz gibi, sessionFactory etkili bir şekilde özeldir - başka kimse onu göremez. –