Scala:For Comprehension编译错误(新手问题)
发布时间:2020-12-16 10:01:47 所属栏目:安全 来源:网络整理
导读:我得到以下代码的类型不匹配编译错误: case class MyClass(name: String) def getMyClass(id : String) = { //For now ignore the id field Some(Seq(MyClass("test1"),MyClass("test2"),MyClass("test3"),MyClass("test4"),MyClass("test5"))) } def getHe
我得到以下代码的类型不匹配编译错误:
case class MyClass(name: String) def getMyClass(id : String) = { //For now ignore the id field Some(Seq(MyClass("test1"),MyClass("test2"),MyClass("test3"),MyClass("test4"),MyClass("test5"))) } def getHeader() = { Map( "n" -> List(Map("s"->"t"),Map("s"->"t"),Map("s"->"t")),"o" -> List(Map("s"->"t"),"id" -> "12345" ) } def castToString(any: Option[Any]): Option[String] = { any match { case Some(value: String) => Some(value) case _ => None } } val h = getHeader() for{ id <- castToString(h.get("id")) //I hate I have to do this but the map is a Map[String,Any] m <- getMyClass(id) //This strips the Some from the Some(Seq[MyClass]) item <- m //XXXXXXXX Compile errors oList <- h.get("o") nList <- h.get("n") } yield { (oList,nList,item) } 错误是: C:temps.scala:28: error: type mismatch; found : Seq[(java.lang.Object,java.lang.Object,this.MyClass)] required: Option[?] item <- m ^ 但是m是Seq [MyClass]类型.我试图遍历列表并设置项目 解决方法
你不能以这种方式混合容器类型,特别是给定了Option.flatMap的签名(这个表达式被删除了 – 请参阅pst的注释).但是,有一个非常简单的解决方案:
for{ id <- castToString(h.get("id")).toSeq m <- getMyClass(id).toSeq oList <- h.get("o") nList <- h.get("n") } yield { (oList,item) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |