SORU
7 AĞUSTOS 2009, Cuma


Scala Scala 2.8 ve 2.7 arasındaki en büyük farklar nelerdir?

Scala oldukça büyük bir programın 2.7.5, ve şimdi ileri sürüm 2.8 arıyorum yazdım. Ama Scala evriminde büyük bir sıçrama beni nasıl etkileyeceğini merak ediyorum.

Scala bu iki versiyon arasındaki en büyük farklar olacak? Ve belki de en önemlisi:

  • Edeceğimgerekher şeyi yeniden yazmak için?
  • Yapıyorumistiyorumsadece biraz serin yeni özellikten yararlanmak için her şeyi yeniden yazmak için?
  • Tam olarak genel olarak Scala 2.8 yeni özellikleri nelerdir?

CEVAP
31 Mart 2010, ÇARŞAMBA


Bu adımı atıyor

Senin geçirirken, derleyici bazı güvenlik ağı sağlayabilir.

  1. 2.7.7 karşı eski kod derleme -deprecation ve takip et tüm admin tavsiyeleri uyarılar.
  2. Güncelleştirme kullanmak için kodunuzu unnnested paketleri. Bu yapılabilir mekanik olarak tekrar tekrar çalıştırarak bu düzenli ifade arama değiştirin.

    s/^(package com.example.project.*)\.(\w )/$1\npackage $2/g
    
  3. 2.8.0 derleyici ile, paranoyak komut satırı seçenekleri -deprecation -Xmigration -Xcheckinit -Xstrict-warnings -Xwarninit kullanarak derleyin

  4. Eğer hata alırsanız hata could not find implicit value for evidence parameter of type scala.reflect.ClassManifest[T], örtülü bir parametre (veya benzer bir bağlam bağlı) eklemek gerekir, Bir tür parametresi.

    Daha önce:

    scala> def listToArray[T](ls: List[T]): Array[T] = ls.toArray
    <console>:5: error: could not find implicit value for evidence parameter of type         scala.reflect.ClassManifest[T]
           def listToArray[T](ls: List[T]): Array[T] = ls.toArray                                              ^
    

    Sonra:

    scala> def listToArray[T: Manifest](ls: List[T]): Array[T] = ls.toArray
    listToArray: [T](ls: List[T])(implicit evidence$1: Manifest[T])Array[T]
    
    
    scala> def listToArray[T](ls: List[T])(implicit m: Manifest[T]): Array[T] = ls.toArray          
    listToArray: [T](ls: List[T])(implicit m: Manifest[T])Array[T]
    

    listToArray, çağıran herhangi bir yöntem ve kendisi bir tür parametresi olarak T da örtülü bir parametre olarak Tezahür kabul etmelidir alır. Ayrıntılar için Arrays SID bkz.

  5. Çok uzun zaman önce böyle bir hata ile karşılaşırsınız:

    scala> collection.Map(1 -> 2): Map[Int, Int]
    <console>:6: error: type mismatch;
     found   : scala.collection.Map[Int,Int]
     required: Map[Int,Int]
           collection.Map(1 -> 2): Map[Int, Int]
                 ^
    

    15 ** tipi collection.immutable.Map Predef bir takma ad olduğunu anlamak gerekir.

     object Predef {
         type Map[A, B] = collection.immutable.Map[A, B]
         val Map = collection.immutable.Map
     }
    

    Üç tip Map -- salt okunur bir arayüz olarak sayılabilir. collection.Map, değişmez bir uygulama: collection.immutable.Map ve değişken bir uygulama: collection.mutable.Map. Ayrıca, kütüphane özellikleri MapLike, ama bu gerçekten bir uygulama detay paralel bir dizi davranışı tanımlar.

Meyvelerini toplamakla meşgul

  1. Yöntemi ile aşırı yükleme olarak adlandırılır ve Varsayılan parametreleri biraz değiştirin.
  2. Dava dersleri copy oluşturulan bu yöntemi kullanın.

      scala> case class Foo(a: Int, b: String)
      defined class Foo
    
    
      scala> Foo(1, "a").copy(b = "b")
      res1: Foo = Foo(1,b)
    
  3. Seq Iterable Traversable List yöntem imzaları genelleme. Koleksiyon sınıfları temiz bir hiyerarşi içinde olduğundan, daha genel bir tür kabul EDEBİLİR MİSİN.
  4. Java kütüphaneleri kullanarak ek Açıklamalar ile entegre. Şimdi iç içe geçmiş ek açıklamalar belirtebilirsiniz ve açıklamalar alanlar veya yöntemler için hedeflenmiş üzerinde olsun fine-grained control. Bu Bahar kullanın veya Scala kodu ile JPA için yardımcı olur.

Seni örnek @specialized ve Devamı için geçirme başlangıç olarak güvenli bir şekilde yok sayılabilir birçok yeni özellik vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CZTUTORIALS

    CZTUTORIALS

    28 Ocak 2011
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • MisterBrightside

    MisterBright

    24 Mart 2006