包含未按预期工作的对象的映射Scala
试图理解Scala的基本概念。为什么这段代码没有编译包含未按预期工作的对象的映射Scala,scala,object,dictionary,Scala,Object,Dictionary,试图理解Scala的基本概念。为什么这段代码没有编译 case class User( id: Int, firstName: String, lastName: String, age: Int, gender: Option[String]) object UserRepository { val users = Map ( 1 -&g
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)
}
错误:25,42值筛选器不是对象cala.collection.immutable.Map的成员
对于k,v
这是两个独立的表达式:首先执行在Scala中有效的val users=Map,并将Map类型的伴随对象分配给用户,然后计算
( 1 -> User(1, "John", "Doe", 32, Some("male")),
2 -> User(2, "Johanna", "Doe", 30, None)
)
然后扔掉结果。如果移动到上一行,告诉编译器定义尚未结束,它将工作:
val users = Map(
1 -> User(1, "John", "Doe", 32, Some("male")),
2 -> User(2, "Johanna", "Doe", 30, None)
)
这是两个独立的表达式:首先执行在Scala中有效的val users=Map,并将Map类型的伴随对象分配给用户,然后计算
( 1 -> User(1, "John", "Doe", 32, Some("male")),
2 -> User(2, "Johanna", "Doe", 30, None)
)
然后扔掉结果。如果移动到上一行,告诉编译器定义尚未结束,它将工作:
val users = Map(
1 -> User(1, "John", "Doe", 32, Some("male")),
2 -> User(2, "Johanna", "Doe", 30, None)
)
在映射之后立即启动括号,告诉scala编译器括号属于映射 而不是这个
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 }
}
这样做
object UserRepository {
val users = Map( 1 -> User(1, "John", "Doe", 32, Some("male")),
2 -> User(2, "Johanna", "Doe", 30, None)) //start parenthesis after Map
//def findById(id: Int): Option[User] = users
//def findAll = users.values
def getUsers() = { users }
}
在映射之后立即启动括号,告诉scala编译器括号属于映射 而不是这个
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 }
}
这样做
object UserRepository {
val users = Map( 1 -> User(1, "John", "Doe", 32, Some("male")),
2 -> User(2, "Johanna", "Doe", 30, None)) //start parenthesis after Map
//def findById(id: Int): Option[User] = users
//def findAll = users.values
def getUsers() = { users }
}
我想念;太多了:!TNX第二次求值的含义是什么?您是指原始示例中的第二个表达式,即1->。。。?它将返回一个包含两个元组的元组,然后丢弃结果,因为它没有分配给任何对象。如果你像这样扔掉1+1的结果,Scala会给你一个警告,但不幸的是不是在这种情况下,因为元组创建实际上是一个构造函数调用,它可能有副作用;太多了:!TNX第二次求值的含义是什么?您是指原始示例中的第二个表达式,即1->。。。?它将返回一个包含两个元组的元组,然后丢弃结果,因为它没有分配给任何对象。如果您像这样扔掉1+1的结果,Scala会给您一个警告,但不幸的是,在这种情况下不会,因为元组创建实际上是一个构造函数调用,它可能会有副作用。当遇到我不完全理解的错误消息时,显式注意val的返回类型def,在您的例子中,您可以明确地注意到:def getUsers:Map[Int,User]=…A尝试过这个方法,但它不起作用-来自Java世界,这是出乎意料的,新线云意味着这么多。第二个表达是什么意思?第二个表达是什么意思?你能多说几句吗?也许Alexey已经用他发布的答案回答了您的问题?当遇到我不完全理解的错误消息时,显式地记录val、def等的返回类型会有帮助。在您的例子中,您可以显式地记录:def getUsers:Map[Int,User]=…a尝试了这个方法,但它不起作用-来自Java world,这是出乎意料的,新的线云意义重大。第二个表达是什么意思?第二个表达是什么意思?你能多说几句吗?也许Alexey已经用他贴出的答案回答了你的问题?