Scala使用带有+的案例陈述

时间:2012-12-23 17:03:12

标签: scala switch-statement tuples match

仍在使用Coursera Scala课程的hw1,我在使用案例陈述和元组时遇到了麻烦。

object Pascal {
    def main(args: List[String]) = {
        require((args length) == 2, "args length must equal 2")
          println("calling pascal on " + (args head) + " and " + (args last))
          pascal((args head) toInt, (args last) toInt)
    }
    def pascal(c: Int, r: Int): Int = {
        require(((r >= 0) && (c >= 0))
            && (c > r + 1), "r and c must be >= 0 and c must be <= r + 1")
        (c, r) match {
            case (_, 0) => 1
            case (0, _) => 1
            case (1 + r, _) => 1 // error: value not found "+"
            case (_, _) => pascal(r-1,c-1) + pascal(r-1,c-1)
        }
    }
}

请告诉我如何在Scala中编写代码:

case (1 + r, _) => 1

2 个答案:

答案 0 :(得分:4)

我相信你正在寻找这样的东西:

case (v, _) if(v == r + 1) => 1

将匹配c的任何值(之前匹配的c == 0除外),然后应用测试来检查v是否等于r + 1

答案 1 :(得分:3)

你也可以

val R = r+1
(c, r) match {
  case (0, _) => 1
  case (R, _) => 1
  case (_, _) => pascal(r-1, c-1) + pascal(r-1,c)
}

(注意你的递归是错误的 - 你添加两次相同的条目! - 并且那个案例(_, 0)是不必要的,因为如果r是0,则c是0(由它的情况捕获),或c是r + 1,由该情况捕获。)