为什么我的集合模式匹配在 Scala 中失败?
我的代码如下,
val hash = new HashMap[String, List[Any]]
hash.put("test", List(1, true, 3))
val result = hash.get("test")
result match {
case List(Int, Boolean, Int) => println("found")
case _ => println("not found")
}
我希望打印“找到”,但打印“未找到”。我试图匹配任何具有 Int、Boolean、Int 类型三个元素的列表
My code is as follows
val hash = new HashMap[String, List[Any]]
hash.put("test", List(1, true, 3))
val result = hash.get("test")
result match {
case List(Int, Boolean, Int) => println("found")
case _ => println("not found")
}
I would expect "found" to be printed but "not found" is printed. I'm trying to match on any List that has three elements of type Int, Boolean, Int
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您正在检查包含伴随对象的列表 Int 和 布尔值。这些与类 Int 和 布尔值。
请改用键入模式。
Scala 参考,第 8.1 节描述了您可以使用的不同模式。
You are checking for a list containing the companion objects Int and Boolean. These are not the same as the classes Int and Boolean.
Use a Typed Pattern instead.
Scala Reference, Section 8.1 describes the different patterns you can use.
第一个问题是
get
方法返回一个Option
:因此您需要匹配
Some(List(...))
,而不是List(...)
。接下来,您将再次检查列表是否包含对象
Int
、Boolean
和Int
,而不是是否包含类型再次为Int
、Boolean
和Int
的对象。Int
和Boolean
都是类型和对象同伴。考虑:所以正确的匹配语句是:
The first problem is that the
get
method returns anOption
:So you'd need to match against
Some(List(...))
, notList(...)
.Next, you are checking if the list contains the objects
Int
,Boolean
andInt
again, not if it contains objects whose types areInt
,Boolean
andInt
again.Int
andBoolean
are both types and object companions. Consider:So the correct match statement would be:
以下也适用于 Scala 2.8
The following also works for Scala 2.8