這是我必須驗證用戶的角色
的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