📜  斯卡拉 | unapplySeq() 方法

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

斯卡拉 | unapplySeq() 方法

unapplySeq()方法是一个Extractor方法。它提取特定类型的对象,然后再次将其重构为提取值的序列,并且在编译时未指定此序列的长度。所以,为了重构一个包含序列的对象,你需要使用这个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

在这里,我们在Option中使用了一个特征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 ,它对由比较函数指定的指定序列进行排序。