Scala 模式匹配

2022-05-13 14:44 更新

模式匹配允許我們在多個條件之間進行編程選擇。

例子

object Main extends App {
    def printNum(int: Int) {
     int match {
         case 0 => println("Zero")
         case 1 => println("One")
         case _ => println("more than one")
     }
    }
    printNum(0)
    printNum(1)
    printNum(2)
}

帶下劃線_的最后一種情況是通配符。它匹配任何未定義在上面的情況下。

以下代碼說明計算Fibonacci數(shù)字的示例。

def fibonacci(in: Int): Int = in match {
 case 0 => 0
 case 1 => 1
 case n => fibonacci(n - 1) + fibonacci(n - 2)
}

Scala允許將守衛(wèi)放置在模式中,以測試無法在模式聲明本身中測試的特定條件。

因此,如果傳遞負數(shù),我們可以寫入我們的Fibonacci 計算器返回0,如以下示例所示。

def fib2(in: Int): Int = in match {
 case n if n <= 0 => 0
 case 1 => 1
 case n => fib2(n - 1) + fib2(n - 2)
}

匹配任何類型

讓我們考慮一個任何類型的元素的列表,包含一個String,一個Double,一個Int和一個Char。

object Main extends App {
    val anyList= List(1, "A", 2, 2.5, 'a')

    for (m <- anyList) {
        m match {
            case i: Int => println("Integer: " + i)
            case s: String => println("String: " + s)
            case f: Double => println("Double: " + f)
            case other => println("other: " + other)
        }
    }
}

測試數(shù)據(jù)類型

下面的方法測試一個傳入的Object,看看它是一個String,一個Integer,或者別的東西。

def test2(in: Any) = in match {
    case s: String => "String, length "+s.length
    case i: Int if i > 0 => "Natural Int"
    case i: Int => "Another Int"
    case a: AnyRef => a.getClass.getName
    case _ => "null"
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號