我正在尝试定义一个扩展特征的User对象。特征包含用户对象的集合。当我尝试创建新用户时。我得到Stackoverflow错误,我无法理解为什么
scala> :paste
// Entering paste mode (ctrl-D to finish)
case class User(email:String) extends userTrait
trait userTrait {
self:User =>
val administrators = new User("test@ab.com")::new User("test2@ab.com")::Nil
def isAdminstrator = administrators.contains(this)
}
// Exiting paste mode, now interpreting.
defined class User
defined trait userTrait
scala> new User("test")
java.lang.StackOverflowError
... 1024 elided
答案 0 :(得分:3)
“如何初始化该集合?”
您只需将val administrators
添加到lazy
trait userTrait {
self: User =>
/* >>> */ lazy val administrators =
new User("test@ab.com") :: new User("test2@ab.com") :: Nil
def isAdminstrator = administrators.contains(this)
}
case class User(email: String) extends userTrait
println(new User("test").isAdminstrator)
// prints false
println(new User("test@ab.com").isAdminstrator)
// prints true
答案 1 :(得分:2)
这里有一个循环条件。 User extends userTrait
(实习生初始化new User ...
)