この質問はthis other questionに関連しています。そこでは、基本的に単純なケースクラスにインターフェイス実装を取り付けることができます。コアはこのビットです:次の暗黙的な設計を拡張してOptionのケースをカバーする方法はありますか?
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'のサブタイプではありません。 :/ – marios
'UserRow(...):Subject' ~~>' toPluggable(UserRow(...)):Subject'。できます。 – HTNW