pathTokens match {
case List("post") => ("post", "index")
case List("search") => ("search", "index")
case List() => ("home", "index")
} match {
case (controller, action) => loadController(http, controller, action)
case _ => null
}
我想要连续比赛。但得到了编译错误。 :(
(pathTokens match {
case List("post") => ("post", "index")
case List("search") => ("search", "index")
case List() => ("home", "index")
}) match {
case (controller, action) => loadController(http, controller, action)
case _ => null
}
当我用parenparenthesis包装第一场比赛时,它运作正常。 为什么我需要括号?
答案 0 :(得分:10)
不幸的是,这就是Scala语法的定义方式。请看一下规格:
http://www.scala-lang.org/docu/files/ScalaReference.pdf
在那里你会找到以下定义(第153页,为了清楚起见缩短了):
Expr1 ::= PostfixExpr 'match' '{' CaseClauses '}'
如果你深入研究PostfixExpr
,你最终会找到SimpleExpr1
,其中包含以下定义:
SimpleExpr1 ::= '(' [Exprs [',']] ')' Exprs ::= Expr {',' Expr}
这意味着SimpleExpr1
(以及PostfixExpr
)在括在括号中时只能包含其他表达式(如'x match y')。
答案 1 :(得分:1)
不是你想要的,但你可以做这样的事情:
val f1 = (_: List[String]) match {
case List("post") => ("post", "index")
case List("search") => ("search", "index")
case List() => ("home", "index")
}
val f2 = (_: (String, String)) match {
case (controller, action) => loadController(http, controller, action)
}
(f1 andThen f2)(pathTokens)