Latest web development tutorials

سكالا نمط مطابقة

تقدم سكالا نمط قوية مطابقة آلية، كما تستخدم على نطاق واسع.

يحتوي نمط مطابقة سلسلة من البدائل، كل منها يبدأ معقضية رئيسية.يحتوي كل خيار النسخ الاحتياطي ونمط لعدد وافر من التعبيرات. رمز السهم=> يفصل بين أنماط والتعبيرات.

ما يلي هو نمط بسيط مطابقة مثال قيمة عددية:

object Test {
   def main(args: Array[String]) {
      println(matchTest(3))

   }
   def matchTest(x: Int): String = x match {
      case 1 => "one"
      case 2 => "two"
      case _ => "many"
   }
}

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

$ scalac Test.scala 
$ scala Test
many

تطابق جافا المقابلة في التبديل، ولكن مكتوبة بعد التعبير محدد.وهي: مباراة محدد {بدائل}.

بأمر من تعبيرات لتتناسب مع قانون مكتوب في محاولة كل وضع لإكمال العملية الحسابية، اذا وجدوا هناك حالة المطابقة، مطابقة وبقية القضية لن تستمر.

القادم ونحن ننظر إلى نوع بيانات مختلف من نمط مطابقة:

object Test {
   def main(args: Array[String]) {
      println(matchTest("two"))
      println(matchTest("test"))
      println(matchTest(1))
      println(matchTest(6))

   }
   def matchTest(x: Any): Any = x match {
      case 1 => "one"
      case "two" => 2
      case y: Int => "scala.Int"
      case _ => "many"
   }
}

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

$ scalac Test.scala 
$ scala Test
2
many
one
scala.Int

ومن الأمثلة على الحالة الأولى يتوافق مع قيمة عددية من 1، والحالة الثانية يتوافق مع قيمة سلسلة من اثنين، والحالة الثانية يتوافق مع قيمة سلسلة من اثنين، والحالة الثالثة يتوافق مع نوع النموذج المستخدم لتحديد ما إذا كانت قيمة مرت كليا نوع، استخدم مقارنة isInstanceOf لتحديد نوع، نمط مطابقة أفضل. الحالة الرابعة تشير البدائل الكاملة مباراة الافتراضي، لم يتم العثور على تلك المباراة في المباراة الأخرى، والتحول مماثل في التقصير.


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

استخدام حالة الكلمة هو تعريف الفئة هي فئة العينة (الطبقات الحالة)، والطبقة عينة هي فئة خاصة، إلى أقصى حد لمطابقة النمط.

وفيما يلي مثال بسيط من فئة عينة:

object Test {
   def main(args: Array[String]) {
   	val alice = new Person("Alice", 25)
	val bob = new Person("Bob", 32)
   	val charlie = new Person("Charlie", 32)
   
    for (person <- List(alice, bob, charlie)) {
    	person match {
            case Person("Alice", 25) => println("Hi Alice!")
            case Person("Bob", 32) => println("Hi Bob!")
            case Person(name, age) =>
               println("Age: " + age + " year, name: " + name + "?")
         }
      }
   }
   // 样例类
   case class Person(name: String, age: Int)
}

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

$ scalac Test.scala 
$ scala Test
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?

عندما قمت بتعريف سبيل المثال الدرجة، يحدث الإجراء التالي تلقائيا:

  • كل منشئ المعلمة أصبحت فال، ما لم يعلن صراحة فار، ولكن ذلك لا ينصح.
  • توفير تطبيق أساليب الأشياء المرتبطة بها، حتى تتمكن من بناء الأجسام لا يمكن استخدام الكلمة الجديدة.
  • يمكن توفير طريقة إلغاء تطبيق نمط مطابقة يمكن أن تعمل.
  • توليد toString، يساوي، شفرة التجزئة ونسخ طريقة، ما لم يظهر على الشاشة التعاريف لهذه الأساليب.