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
}
Run Code Online (Sandbox Code Playgroud)
我想要连续的比赛.但得到了编译错误.:(
(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
}
Run Code Online (Sandbox Code Playgroud)
当我用parenparenthesis包装第一场比赛时,它运作正常.为什么我需要括号?
Mic*_*mer 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').