2012-03-19 36 views
5

我遇到了scala中模式匹配的奇怪问题。以下代码会报告编译错误。但是如果我删除一个case语句,它会成功编译。所以有两件事让我困惑。一个是它看起来像scala的最大模式匹配数是9.另一个是错误消息,我没有在这个项目中使用sbt,我在另一个项目中使用它。任何人都可以帮助我?scala的模式匹配数是否有限制?

SBT编译器在编译项目时崩溃了。这是Scala编译器或SBT的 中的一个错误。详细信息请查阅Erorr日志。错误 消息是:ch.epfl.lamp.fjbg.JCode $ OffsetTooBigException:偏移过大 以适应16位:38092斯卡拉未知斯卡拉问题

def main(args: Array[String]) { 
    val list = List(1, 2, 3) 

    import scala.collection.JavaConversions._ 
    val pattern_1 = """1""".r 
    val pattern_2 = """1""".r 
    val pattern_3 = """1""".r 
    val pattern_4 = """1""".r 
    val pattern_5 = """1""".r 
    val pattern_6 = """1""".r 
    val pattern_7 = """1""".r 
    val pattern_8 = """1""".r 
    val pattern_9 = """1""".r 
    val pattern_10 = """1""".r 

    "ffd,fa".split(",") foreach { 
     case pattern_1() => 
     case pattern_2() => 
     case pattern_3() => 
     case pattern_4() => 
     case pattern_5() => 
     case pattern_6() => 
     case pattern_7() => 
     case pattern_8() => 
     case pattern_9() => 
    } 
    } 

回答

10

是。案件数量有限。不过,我相信这将在2.10中用新的virtual pattern matcher来解决。

解决问题的最简单方法就是将模式匹配分成多个嵌套级别的匹配。

+0

确认已修复最新每晚构建。 – rxg 2012-04-28 05:55:41