【发布时间】:2012-12-20 00:30:56
【问题描述】:
我希望能够在一个模式中多次使用单个变量,这样只有在所有位置都存在相同值时它才会匹配,例如
list match {
case x :: x :: xs => // recurse
}
匹配List(1,1,2),但不匹配List(1,2,1)。但这不能与 error: x is already defined as value x 编译。
在研究这个问题时,我发现我也可以在 case 子句中包含一个守卫,所以我可以这样做
list match {
case x1 :: x2 :: xs if x1==x2 => // recurse
}
这似乎以相同的方式工作(确实如此,对吗?)。这很好,但如果我想在很多地方都使用相同的值,它看起来就不会那么干净了,比如
list match {
case x1::x2::x3::x4::xs if x1==x2 && x2==x3 && x3==x4 => // recurse
}
有没有更优雅的方法可以做到这一点?
一些注意事项:是的,我只是在学习 scala,如果不清楚,所以我不确定这是我真正想要做的事情,但我'我只是对可能的感兴趣。在这方面,我并不是真的在寻找完全不同的解决方案,例如 takeWhile 或 filter 之类的,但我对模式匹配特别感兴趣。
【问题讨论】: