如何匹配scala Map中的值
How to match value from scala Map
我是 scala 的新手,正在使用地图。我做了一个 get on Map,但我不确定如何检查 return 类型并使用它。
我有以下代码,它给出了以下编译错误“模式类型与预期类型不兼容:TestClass.type 需要选项 [TestClass]。
object MapOptionUsage extends App {
val map : Map[Int, TestClass] = Map[Int, TestClass]()
var i = 0
for(i <- 0 to 5){
map.put(i, createObj(i))
}
var a = map.get(5)
a match {
case TestClass => {//dosomething
}
case None => {//dosomething
}
}
def createObj(i: Int): TestClass = {
return new TestClass(i)
}
}
case class TestClass(val id: Int)
get()
returns Option[]
和 TestClass
接受一个构造函数参数,所以你必须匹配这两个东西。
case Some(TestClass(x)) => {//dosomething
顺便说一句,好的 Scala 代码不使用 var
或 return
。
有几个问题。
,你的地图是不可变的,你不能把东西放在不可变的地图里面。
val map : mutable.Map[Int, TestClass] = mutable.Map[Int, TestClass]()
是case Some(x)=> {//dosomething
因为return是一个选项,你需要一个Some类型来匹配。
是 def createObj(i: Int): TestClass = {
需要在您的对象上定义,而不是在您的匹配语句中。
编辑:处理评论。
case Some(x)=> {//dosomething
System.out.println(x.id)
}
会匹配并创建一个新值,其中x等于Some的内容,即map里面包含的TestClass。
我是 scala 的新手,正在使用地图。我做了一个 get on Map,但我不确定如何检查 return 类型并使用它。
我有以下代码,它给出了以下编译错误“模式类型与预期类型不兼容:TestClass.type 需要选项 [TestClass]。
object MapOptionUsage extends App {
val map : Map[Int, TestClass] = Map[Int, TestClass]()
var i = 0
for(i <- 0 to 5){
map.put(i, createObj(i))
}
var a = map.get(5)
a match {
case TestClass => {//dosomething
}
case None => {//dosomething
}
}
def createObj(i: Int): TestClass = {
return new TestClass(i)
}
}
case class TestClass(val id: Int)
get()
returns Option[]
和 TestClass
接受一个构造函数参数,所以你必须匹配这两个东西。
case Some(TestClass(x)) => {//dosomething
顺便说一句,好的 Scala 代码不使用 var
或 return
。
有几个问题。
,你的地图是不可变的,你不能把东西放在不可变的地图里面。
val map : mutable.Map[Int, TestClass] = mutable.Map[Int, TestClass]()
是
case Some(x)=> {//dosomething
因为return是一个选项,你需要一个Some类型来匹配。是
def createObj(i: Int): TestClass = {
需要在您的对象上定义,而不是在您的匹配语句中。
编辑:处理评论。
case Some(x)=> {//dosomething
System.out.println(x.id)
}
会匹配并创建一个新值,其中x等于Some的内容,即map里面包含的TestClass。