模式匹配不匹配给定变量
Pattern matching not matching given variable
我已经实现了 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)
}
}
您的 row
匹配正在隐藏方法参数。为了实现你想要的,你可以尝试为你的模式匹配使用所谓的守卫,例如
case n if n == row => 1
有了这个,你有 3 个案例,0
案例,n is equal to given row parameter
案例和 default
案例。否则,row
匹配将匹配所有不等于 0
的剩余数字,这将使最后的 _
匹配永远不会被触发。
对于 Martin 的回答,您也可以使用反引号来获得相同的结果:
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 的相关章节(搜索 backticks 关键字)
我已经实现了 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)
}
}
您的 row
匹配正在隐藏方法参数。为了实现你想要的,你可以尝试为你的模式匹配使用所谓的守卫,例如
case n if n == row => 1
有了这个,你有 3 个案例,0
案例,n is equal to given row parameter
案例和 default
案例。否则,row
匹配将匹配所有不等于 0
的剩余数字,这将使最后的 _
匹配永远不会被触发。
对于 Martin 的回答,您也可以使用反引号来获得相同的结果:
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 的相关章节(搜索 backticks 关键字)