[英]Scala pattern matching with tuple: matching equal values in the tuple
我創建了一個從Pascal Triangle中檢索給定值的函數,並且我使用了if
語句。 現在我想重構函數以使用模式匹配。
我的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
為,當row
和column
具有相同的值?
我嘗試在這種case
使用相同的變量名稱,如下所示:
case (x, x) => 1 // last column
我也嘗試使用row
的值,如下所示:
case (_, row) => 1 // last column
但它們不起作用。 在第一種情況下,我有一個編譯錯誤,在第二種情況下,IDE說我正在從match
隱藏變量row
。
這有可能嗎?
謝謝。
對於第一個,使用if警衛:
(1, 2) match { case (x, y) if x == y => 1; ... }
對於第二個,當你想匹配一個變量(而不是綁定和遮蔽它)時,你可以使用反引號(`):
(1, 2) match { case (_, `row`) => 1; ... }
你可以使用一個guard ,它是一個可以檢查非穩定條件的case表達式的一部分,並且不會令人驚訝地類似於if
語句:
(row, column) match {
case (x, y) if x == y => 1
// other cases...
}
請注意,不匹配此保護的輸入(即x != y
)將繼續檢查其他情況,因此,例如,另一種case (x, y) => ...
可以跟隨,並假設x != y
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.