如何匹配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 代码不使用 varreturn

有几个问题。

  1. ,你的地图是不可变的,你不能把东西放在不可变的地图里面。 val map : mutable.Map[Int, TestClass] = mutable.Map[Int, TestClass]()

  2. case Some(x)=> {//dosomething因为return是一个选项,你需要一个Some类型来匹配。

  3. def createObj(i: Int): TestClass = { 需要在您的对象上定义,而不是在您的匹配语句中。

编辑:处理评论。

case Some(x)=> {//dosomething
    System.out.println(x.id)
}

会匹配并创建一个新值,其中x等于Some的内容,即map里面包含的TestClass。