В 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 { ... }