scala – 为什么在理解中这两种模式匹配之间的行为存在差异?
发布时间:2020-12-16 09:26:47 所属栏目:安全 来源:网络整理
导读:考虑这个Map [String,Any]: val m1 = Map(("k1" - "v1"),("k2" - 10)) 现在让我们写一个: scala for ((a,b) - m1) println(a + b)k1v1k210 到现在为止还挺好. 现在让我们指定第二个成员的类型: scala for ((a,b: String) - m1) println(a + b)k1v1scala f
考虑这个Map [String,Any]:
val m1 = Map(("k1" -> "v1"),("k2" -> 10)) 现在让我们写一个: scala> for ((a,b) <- m1) println(a + b) k1v1 k210 到现在为止还挺好. 现在让我们指定第二个成员的类型: scala> for ((a,b: String) <- m1) println(a + b) k1v1 scala> for ((a,b: Integer) <- m1) println(a + b) k210 在这里,当我指定一个类型时,会发生过滤,这很好. 现在说我想使用数组[Any]代替: val l1 = Array("a",2) 事情破裂了: scala> for (v: String <- l1) println(v) <console>:7: error: type mismatch; found : (String) => Unit required: (Any) => ? 我的双重问题是: >为什么第二次匹配过滤器也没有呢? 解决方法
好吧,后一个例子不起作用,因为它没有规定.关于什么是合理的行为有一些讨论.就个人而言,我希望它能像你一样工作.问题在于:
val v: String = (10: Any) // is a compile error (10: Any) match { case v: String => } // throws an exception 如果您不相信这一点,请加入club. :-)这是一个解决方法: for (va @ (v: String) <- l1) println(v) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |