SORU
9 Temmuz 2010, Cuma


Apaçık bir Scala nedir ve ne zaman ihtiyacınız var?

Scala 2.7.2 beri bir şey Java türü silme için geçici bir çözüm olan Manifest denir. Ama nasıl Manifest tam olarak ne iş yapar ve neden / ne zaman kullanmak gerekiyor?

Blog yazısıManifests: Reified Types Jorge Ortiz tarafından bazı açıklar, ama birlikte context bounds ile nasıl kullanıldığını açıklamıyor.

Ayrıca, ne Manifest ne fark eder ClassManifest,?

Ben bazı kod (parçası daha büyük bir program, olamaz kolayca bulunur burada) bazı uyarılar ile ilgili tip silme; sanırım çözebilir bunları kullanarak gösterir, ama emin değilim tam olarak nasıl.

CEVAP
9 Temmuz 2010, Cuma


Derleyici JVM çalışma zamanı kolaylıkla temsil edebilir daha türleri hakkında daha fazla bilgi bilir. Bir Bildirim derleyici kaybolmuş boyutlar-arası çalışma zamanında kod için mesaj türü hakkında bir bilgi göndermek için bir yoldur.

Bu Kleptonians fosil kayıtları kodlanmış mesajlar kaldığını ve "DNA insan. önemsiz benzer Lightspeed ve yerçekimi rezonans alanları sınırlamalar nedeniyle doğrudan iletişim kuramıyor. Ama, eğer onların sinyali ayarlamak için nasıl biliyorsanız, olamaz yollarını düşünün, öğle yemeği için ne yemek ya da oynamak için hangi bir karar istifade edebilirsiniz.

Eğer bir Bildirim daha fazla ayrıntı bilmeden gördüğünüz hataları yararlanacak belli değil.

Bildirimlerin yaygın bir kullanım kodunuzu farklı bir koleksiyon statik Türüne göre davranır. Örneğin, eğer bir Liste[String] tedavi etmek isteseydin ne farklı bir Liste diğer türleri:

 def foo[T](x: List[T])(implicit m: Manifest[T]) = {
    if (m <:< manifest[String])
      println("Hey, this list is full of strings")
    else
      println("Non-stringy list")
  }

  foo(List("one", "two")) // Hey, this list is full of strings
  foo(List(1, 2)) // Non-stringy list
  foo(List("one", 2)) // Non-stringy list

Bu yansıma tabanlı bir çözüm muhtemelen listesindeki her öğe teftiş içerecektir.

Bir bağlam bağlı scala yazın-sınıfları kullanarak için en uygun gibi, burada da Debasish Ghosh tarafından açıklanmıştır: http://debasishg.blogspot.com/2010/06/scala-implicits-type-classes-here-i.html

İçerik sınırları da sadece yöntem imzaları daha okunaklı hale getirebilir. Örneğin, yukarıdaki işlevi yeniden yazılmış gibi yani bağlam sınırları kullanıyor olabilir:

  def foo[T: Manifest](x: List[T]) = {
    if (manifest[T] <:< manifest[String])
      println("Hey, this list is full of strings")
    else
      println("Non-stringy list")
  }

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hytchme

    hytchme

    9 Mart 2014
  • Nightmare2005

    Nightmare200

    14 Ocak 2007
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007