📜  在 Scala 中使用具有模式匹配的提取器

📅  最后修改于: 2022-05-13 01:55:25.637000             🧑  作者: Mango

在 Scala 中使用具有模式匹配的提取器

Scala Extractor 被定义为一个对象,它有一个名为 unapply 的方法作为它的一部分。提取器可用于模式匹配。 unapply 方法将自发执行,同时比较模式匹配中提取器的对象。

下面是具有模式匹配的提取器示例。
示例 #1:

// Scala program of extractors 
// with pattern matching 
  
// Creating object 
object GfG 
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
  
        // Assigning value to the 
        // object 
        val x = GfG(25) 
  
        // Displays output of the 
        // Apply method 
        println(x) 
  
        // Applying pattern matching 
        x match
        { 
  
            // unapply method is called 
            case GfG(y) => println("The value is: "+y) 
            case _ => println("Can't be evaluated") 
      
        } 
    } 
      
    // Defining apply method 
    def apply(x: Double) = x / 5
  
    // Defining unapply method 
    def unapply(z: Double): Option[Double] =
  
        if (z % 5 == 0) 
        { 
            Some(z/5) 
        } 
      
        else None 
} 
输出:
5.0
The value is: 1.0

在上面的示例中,对象名称是 GFG,我们使用 unapply 方法并应用带有匹配表达式的案例类。

示例 #2:

// Scala program of extractors 
// with pattern matching 
  
// Creating object 
object GFG
{ 
  
    // Main method 
    def main(args: Array[String]) 
    { 
  
        val x = GFG(15)
        println(x)
  
        x match
        {
            case GFG(num) => println(x + 
                        " is bigger two times than " + num)
          
            // Unapply is invoked
            case _ => println("not calculated")
    }
}
def apply(x: Int) = x * 2
def unapply(z: Int): Option[Int] = if (z % 2 == 0) 
                                    Some(z/2) else None
} 
输出:
30
30 is bigger two times than 15

使用 match 语句比较提取器对象时,将自动执行 unapply 方法。
注意: Case 类中已经有一个 Extractor,因此它可以与 Pattern Matching 一起使用。