Может ли типаж в Scala ссылаться на именованный аргумент конструктора класса, в который он смешан? Код ниже не компилируется, потому что аргумент конструктора ModuleDao не является значением val, как определено в трейте. Если я добавлю val
перед аргументом конструктора, чтобы сделать его общедоступным, он совпадает с тем, который указан в трейте, и компилируется, но я бы предпочел не устанавливать его как val
.
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 { ... }