这是我必须验证用户的角色
的this.role
用法意味着此检查的User
方法里面的对象(this
是User
型的,因为它有一个role
) 。 user.role match
意味着你有另一个用户。
我不知道你的这种意图,但鉴于Role
这样定义:
trait Role {}
case object Admin extends Role
case object Guest extends Role
你可以有User
和方法是这样的:
case class User(role: Role) {
def hasAccess(user: User): Boolean =
user.role match {
case this.role => true
case Admin => true
case _ => false
}
}
如果你还在谈论检查不同对象的权限时,比使用this
没有任何意义。你只需要一个User
传递给方法,并只检查用户:
object PermissionChecker {
def hasAccess(user: User): Boolean = user.role match {
case Admin => true
case Guest => true
case _ => false
}
}
注:你的情况看来,它更容易使用的特点和案例对象模型Role
的。但是,如果你写的,你有Role
作为一个抽象类,而实际角色case类:
abstract class Role {}
case class Admin() extends Role
case class Guest() extends Role
比思想保持不变,但你必须调整语法位:
case class User(role: Role) {
def hasAccess(user: User): Boolean = user.role match {
case this.role => true
case _: Admin => true
case _ => false
}
}
变体与单独的对象:
object PermissionChecker {
def hasAccess(user: User): Boolean = user.role match {
case _: Admin => true
case _: Guest => true
case _ => false
}
}
让我问你这个:“角色”是如何实现的?它是否具有有限数量的可能值? (你很可能想在这里定义一个'Role' ADT。) – Jubobs
角色是什么?什么是'这个'? – Maxim
谢谢你的答案。这是我必须验证用户角色的对象,角色是用户访问链接所需的角色。角色是一个抽象类,并且有两个案例类实现它(现在,我会考虑一个或两个) – Motomine