簡體   English   中英

Scala模式與元組匹配:在元組中匹配相等的值

[英]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為,當rowcolumn具有相同的值?

我嘗試在這種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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM