これは(それがrole
を持っているのでthis
は、タイプUser
である)私はthis.role
のユーザーの役割
使用法は、このチェックはUser
のメソッドの内部で起こることを意味し確認する必要が対象です。 user.role match
は、別のユーザーがいることを意味します。
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
}
}
あなたはまだしている場合は、次のように定義された
私はそのためにあなたの意図を知らない
が、与えられたRole
this
を使用するよりも、別のオブジェクトのアクセス許可をチェックすることについては意味がありません。あなただけのメソッドにUser
を渡し、そのユーザーだけをチェックする必要があります。
object PermissionChecker {
def hasAccess(user: User): Boolean = user.role match {
case Admin => true
case Guest => true
case _ => false
}
}
注:あなたのケースでは、それはRole
年代をモデル化するために、形質とケースオブジェクトを使用する方が簡単だと思われます。しかし、あなたはケースクラスと抽象クラス、および実際の役割としてRole
を持っていることを書いた場合:アイデアは同じままより
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
' role'とは何ですか? 「これ」って何? – Maxim
ありがとうございました。これは、ユーザーの役割を検証する必要があるオブジェクトであり、役割は、ユーザーがリンクにアクセスするために必要な役割です。役割は抽象クラスであり、それを実装する2つのケースクラスがあります(今のところ、1つまたは2つ以上があると思います) – Motomine