与元组匹配的Scala模式:匹配元组中的相等值

问题描述:

我创建了一个函数来从Pascal三角形中检索给定值,并且我使用了if语句。现在我想重构函数来使用模式匹配。与元组匹配的Scala模式:匹配元组中的相等值

if基于函数如下:

def valueAt(row: Int, column: Int): Int = { 
    // ... 
    else if (row == column) 1 // last column 
    // 
} 

我的第二个版本的功能,使用模式匹配具有以下特征:

def valueAt2(row: Int, column: Int): Int = (row, column) match { 
    // ... 
} 

是否有可能定义一个case何时rowcolumn具有相同的值?

我在case使用相同的变量名试过了,是这样的:

case (x, x) => 1 // last column 

的,我也尝试使用row的值列,就像这样:

case (_, row) => 1 // last column 

但他们不工作。在第一种情况下,我有一个编译错误,第二种情况下,IDE说我正在从match映射变量row

这可能吗?

谢谢。

这是第一个,使用一个,如果后卫:

(1, 2) match { case (x, y) if x == y => 1; ... } 

对于第二个,当你想匹配一个变量(而不是结合和遮蔽它),你可以使用反引号('):

(1, 2) match { case (_, `row`) => 1; ... } 

您可以使用后卫,这是一个CASE表达式,可以检查非稳定状态的一部分,并没有出奇相似的if声明:

(row, column) match { 
    case (x, y) if x == y => 1 
    // other cases... 
} 

注意,输入不匹配这个后卫(即其中x != y)会继续检查其他情况,因此,例如,另一种情况case (x, y) => ...可以跟随,并假设x != y