Scala 使用模式匹配的提取器

Scala 使用模式匹配的提取器

Scala Extractor被定义为一个对象,它有一个名为unapply的方法作为其一部分。提取器可以在模式匹配中使用。当在模式匹配中比较Extractor的对象时,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方法,用匹配表达式应用case类。

例子 #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

当使用匹配语句比较一个提取器对象时,unapply方法将被自动执行。
注意: 一个Case类中已经有一个提取器,所以,它可以被自发地使用模式匹配。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程