Ссылка на аргумент конструктора из признака

Может ли типаж в 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 { ... }
8
задан Nick 10 October 2011 в 12:11
поделиться