Scala – 匹配选项元组
发布时间:2020-12-16 09:49:32 所属栏目:安全 来源:网络整理
导读:我有: val foo = Some(List(1,2,3)) - Some("y") 我想投射它: foo match { case (Some(x),Some(y)) = println(x + " " + y) case _ = println("error") 这适用于某些(列表(1,3) – 一些(“得分”))但对某些(列表(1,3) – 无,无 – 一些(“y”)失败“)或无
我有:
val foo = Some(List(1,2,3)) -> Some("y") 我想投射它: foo match { case (Some(x),Some(y)) => println(x + " " + y) case _ => println("error") 这适用于某些(列表(1,3) – >一些(“得分”))但对某些(列表(1,3) – >无,无 – >一些(“y”)失败“)或无 – >无: error: constructor cannot be instantiated to expected type; found : Some[A] required: None.type error: not found: value ... 这是为什么? 当然我可以使用getOrElse(),但看起来并不那么优雅. 多谢, 更新: foo match { case (x: Some[List[Int]],y: Some[Int]) => println(x.get) case _ => println("error") } 失败也是: error: pattern type is incompatible with expected type; found : Some[Int] required: None.type 我认为案件_会照顾到这一点. 解决方法
编译器会告诉你一些事情.如果你有一个表达式
val foo = Some(List(1,3)) -> None 它将具有类型(Some [List [Int]],None.type),您可以通过在scala控制台中键入表达式轻松查看 scala> val foo = Some(List(1,3)) -> None foo: (Some[List[Int]],None.type) = (Some(List(1,3)),None) 因此,您在编译时知道元组的第二个元素只能是None,与Some的匹配永远不会成功.因此错误消息. 如果你给foo一个限制较少的类型它会起作用. val foo : (Option[List[Int]],Option[String]) = Some(List(1,3) -> None 请注意,这完全是应该的.匹配一些永远不会发生的事情几乎肯定是一个错误.您必须向上转换为任何以避免编译时错误(但随后您将收到运行时错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |