模式匹配不匹配给定变量

时间:2016-06-14 08:43:23

标签: scala pascals-triangle

我已经实现了pascal的三角形,但是它出了问题,因为col match { case row => ...}它没有正确匹配col与行:

def main(args: Array[String]) {
println("Pascal's Triangle")
for (row <- 0 to 10) {
  for (col <- 0 to row) {
    val res: Int = pascal(col, row)
    print(res + " ")
  }
  println()
}

def pascal(col: Int, row: Int): Int = {
    col match {
      case 0 => 1
      case row => 1
      case _ => pascal(col-1, row-1) + pascal(col, row-1)
    }
}

2 个答案:

答案 0 :(得分:4)

您的row匹配正在影响方法参数。为了达到你想要的效果,你可以尝试使用所谓的防护来进行模式匹配,例如

case n if n == row => 1

有了这个,你有3个案例,0案例,n is equal to given row parameterdefault案例。否则,row匹配将匹配不等于0的所有剩余数字,这将使最后的_匹配永远不会被触发。

答案 1 :(得分:4)

除了马丁的回答之外,您还可以使用反引号获得相同的结果:

def pascal(col: Int, row: Int): Int = {
  col match {
    case 0 => 1
    case `row` => 1
    case _ => pascal(col-1, row-1) + pascal(col, row-1)
  }
}

您可以在Programming in Scala book的相关章节中搜索有关此行为的更多信息(搜索反引号关键字)