Scala unapplySeq()方法

Scala unapplySeq()方法

unapplySeq()方法是一个提取器方法。它提取了一个特定类型的对象,然后再次将其重构为一个提取值的序列,这个序列的长度在编译时没有指定。因此,为了重建一个包含序列的对象,你需要利用这个unapplySeq方法。
语法。

def unapplySeq(object: X): Option[Seq[T]]

在这里,我们有一个X类型的对象,当对象不匹配时,这个方法要么返回None,要么返回一个T类型的提取值序列,包含在Some类中。
现在,让我们通过一些例子来理解它。

例子:

// Scala program of unapplySeq
// method
  
// Creating object
object GfG
{
  
    // Defining unapplySeq method
    def unapplySeq(x:Any): Option[Product2[Int,Seq[String]]] = 
    {
  
        val y = x.asInstanceOf[Author] 
          
        if(x.isInstanceOf[Author]) 
        {
            Some(y.age, y.name)
        }     
        else
            None
    } 
  
    // Main method
    def main(args:Array[String]) = 
    {
  
        // Creating object for Author
        val x = new Author
  
        // Applying Pattern matching
        x match
        {
            case GfG(y:Int,_,z:String) =>
  
            // Displays output
            println("The age of "+z+" is: "+y)
        }
  
        // Assigning age and name
        x.age = 22
        x.name = List("Rahul","Nisha")
  
        // Again applying Pattern matching
        x match
        {                             
            case GfG(y:Int,_,z:String) => 
      
            //Displays output
            println("The age of "+z+" is: "+y)
        }
    }
}
  
// Creating class for author
class Author
{
  
    // Assigning age and name
    var age: Int = 24
    var name: Seq[String] = List("Rohit","Nidhi")
}

输出。

The age of Nidhi is: 24
The age of Nisha is: 22

在这里,我们在选项中使用了一个特质Product2,以便向它传递两个参数。Product2是两个元素的笛卡尔乘积。
例子。

// Scala program of using 
//'UnapplySeq' method of 
// Extractors
  
// Creating object
object GfG 
{
  
    // Main method
    def main(args: Array[String]) 
    {
        object SortedSeq
        {
      
            // Defining unapply method
            def unapplySeq(x: Seq[Int]) = 
            {
                if (x == x.sortWith(_ < _)) 
      
                {
                    Some(x) 
                }
                else None
            }
        }
          
        // Creating a List                     
        val x = List(1,2,3,4,5) 
  
        // Applying pattern matching
        x match 
        { 
            case SortedSeq(a, b, c, d,e) =>
  
        // Displays output
        println(List(a, c, e))
        } 
    }
}

输出。

List(1, 3, 5)

在这里,我们使用了一个函数sortWith ,它按照比较函数的规定对所述序列进行排序。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程