Latest web development tutorials

سكالا مستخرج (النازع)

تم تكوين مستخرج لاستخراج المعلمات من الكائن الذي تم تمريره إلى ذلك من وجوه.

تحتوي المكتبة القياسية سكالا عدد من مستخرج محدد مسبقا، ونحن سوف ننظر إليها تقريبا.

سكالا هو طريقة استخراج كائن مع إلغاء تطبيق ل. طريقة إلغاء تطبيق ينظر تطبق أساليب عكس: يقبل إلغاء تطبيق كائن واستخراج القيم من وجوه، وعادة ما يستخدم قيمة القيمة المستخرجة لبناء الكائن.

يوضح المثال التالي عنوان البريد الكائن استخراج:

object Test {
   def main(args: Array[String]) {
      
      println ("Apply 方法 : " + apply("Zara", "gmail.com"));
      println ("Unapply 方法 : " + unapply("[email protected]"));
      println ("Unapply 方法 : " + unapply("Zara Ali"));

   }
   // 注入方法 (可选)
   def apply(user: String, domain: String) = {
      user +"@"+ domain
   }

   // 提取方法(必选)
   def unapply(str: String): Option[(String, String)] = {
      val parts = str split "@"
      if (parts.length == 2){
         Some(parts(0), parts(1)) 
      }else{
         None
      }
   }
}

تنفيذ التعليمات البرمجية أعلاه، والناتج هو:

$ scalac Test.scala 
$ scala Test
Apply 方法 : [email protected]
Unapply 方法 : Some((Zara,gmail.com))
Unapply 方法 : None

يحدد الكائن أعلاهطريقتين: تطبيق وأساليب إلغاء تطبيق.نحن لسنا بحاجة إلى تطبيق أسلوب باستخدام مشغل جديد لإنشاء كائنات. حتى تتمكن من بناء سلسلة "[email protected]" حسب البيان اختبار ( "زارا"، "gmail.com").

طريقة إلغاء تطبيق ينظر تطبق أساليب عكس: يقبل إلغاء تطبيق كائن واستخراج القيم من وجوه، وعادة ما يستخدم قيمة القيمة المستخرجة لبناء الكائن. أمثلة على الطريقة التي نستخدمها لاستخراج اسم المستخدم وعناوين البريد الإلكتروني إلغاء تطبيق لاحقة من الكائن.

طريقة إلغاء تطبيق بإرجاع لا يوجد في عنوان البريد الإلكتروني الوارد بدلا من مثيل السلسلة. يوضح التعليمة البرمجية التالية:

unapply("[email protected]") 相等于 Some("Zara", "gmail.com")
unapply("Zara Ali") 相等于 None

يستخدم نمط استخراج مطابقة

عندما كنا مثيل فئة، يمكنك أن تأخذ المعلمات صفر أو أكثر، يتم استدعاء مترجم عندما مثيل تطبق الأسلوب. يمكننا تحديد وتطبيق الأسلوب في كائن الفئة.

كما ذكرنا من قبل، وتستخدم إلغاء تطبيق لاستخراج القيمة التي تحدد العثور عليها، وعلى العكس من ذلك تطبيق العملية. عندما نستخدم البيانات مباراة في كائن استخراج النفط، إلغاء تطبيق سوف يتم تنفيذها تلقائيا، على النحو التالي:

object Test {
   def main(args: Array[String]) {
      
      val x = Test(5)
      println(x)

      x match
      {
         case Test(num) => println(x + " 是 " + num + " 的两倍!")
         //unapply 被调用
         case _ => println("无法计算")
      }

   }
   def apply(x: Int) = x*2
   def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}

تنفيذ التعليمات البرمجية أعلاه، والناتج هو:

$ scalac Test.scala 
$ scala Test
10
10 是 5 的两倍!