【发布时间】:2016-12-19 17:44:11
【问题描述】:
此问题与this other question 有关。在那里,我基本上可以将接口实现附加到一个简单的案例类。核心是这个位:
case class UserRow(id: Long, username: String, firstName: String,
lastName : String, ...)
trait PluggableUserService extends be.objectify.deadbolt.scala.models.Subject {
override def roles: List[Role]
}
object PluggableUserService {
implicit class toPluggable(user: UserRow)(implicit userService: UserService)
extends PluggableUserService {
//------------------------------------------------------------------------
override def roles: List[Role] = {
userService.roles(user)
}
}
然后我可以这样做:
val user : UserRow = UserRow(...)
user.roles
// or even nicer
val subject : Subject = UserRow(..)
subject.roles
但现在我需要能够做到这一点但不起作用:
val subject : Option[Subject] = Some(UserRow(...))
如何扩展上面的设计以涵盖此选项协变赋值?
【问题讨论】:
-
UserService 没有在这里定义。那是什么?此外,
val subject : Subject = UserRow(..)这不应该工作...... UserRow 不是Subject的子类型。 :// -
UserRow(...): Subject~~>toPluggable(UserRow(...)): Subject。它有效。
标签: scala