包含未按预期运行的对象的映射Scala

Lev*_*anu 1 dictionary scala object

试图了解基本的Scala概念.为什么这段代码没有编译?

 case class User(
               id: Int,
               firstName: String,
               lastName: String,
               age: Int,
               gender: Option[String])

object UserRepository {
 val users = Map
 ( 1 ->  User(1, "John", "Doe", 32, Some("male")),
   2 -> User(2, "Johanna", "Doe", 30, None)
   )
//def findById(id: Int): Option[User] = users
//def findAll = users.values
def getUsers() = { users }
}

for ((k,v) <- UserRepository.getUsers() ){
 println(v)
}
Run Code Online (Sandbox Code Playgroud)

错误:(25,42)值过滤器不是对象的成员cala.collection.immutable.Map for((k,v)< - UserRepository.getUsers()){

我期望val用户持有Map?

简单的地图工作正常:

val simpleMap = Map (1 -> "First", 2 -> "Second")

for ((k,v) <- simpleMap ){
 println(v)
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 5

val users = Map
( 1 ->  User(1, "John", "Doe", 32, Some("male")),
  2 -> User(2, "Johanna", "Doe", 30, None)
)
Run Code Online (Sandbox Code Playgroud)

这是两个单独的表达式:首先你做val users = Map(在Scala中有效,并将类型的伴随对象分配Mapusers),然后评估

( 1 ->  User(1, "John", "Doe", 32, Some("male")),
  2 -> User(2, "Johanna", "Doe", 30, None)
)
Run Code Online (Sandbox Code Playgroud)

扔掉结果.如果通过移动(到上面的行告诉编译器定义尚未结束,它将起作用:

val users = Map(
  1 ->  User(1, "John", "Doe", 32, Some("male")),
  2 -> User(2, "Johanna", "Doe", 30, None)
)
Run Code Online (Sandbox Code Playgroud)