SORU
15 NİSAN 2009, ÇARŞAMBA


Nasıl Scala desen eşleştirme koduna düzeyinde uygulanır?

Nasıl Scala desen eşleştirme koduna düzeyinde uygulanır?

if (x instanceof Foo) yapıları, ya da başka bir dizi gibi bir şey mi? Performans etkileri nelerdir?

Örneğin, aşağıdaki kod (Scala By Example sayfa 46-48) verilen, nasıl eşdeğeri eval yöntemi için kod Java gibi görünecektir?

abstract class Expr
case class Number(n: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr

def eval(e: Expr): Int = e match {
  case Number(x) => x
  case Sum(l, r) => eval(l)   eval(r)
}

P. S. ben bayt gösterimi benim için yeterli olur Java bayt kodu okuma olabilir, ama muhtemelen Java kodu olarak diğer okuyucular gibi nasıl görüneceğini bilmek için daha iyi olurdu.

P. P. S. Programming in Scala Scala nasıl uygulanır hakkında bu ve benzeri sorulara bir cevap ver kitap Mı? Kitabı sipariş ettim ama henüz ulaşmadı.

CEVAP
16 NİSAN 2009, PERŞEMBE


Düşük seviye bir çözücü ile keşfedilmeyi olabilir ama kısa cevap/yüklem desen bağlı olduğu birinin ise bir grup olmasıdır

case Sum(l,r) // instance of check followed by fetching the two arguments and assigning to two variables l and r but see below about custom extractors 
case "hello" // equality check
case _ : Foo // instance of check
case x => // assignment to a fresh variable
case _ => // do nothing, this is the tail else on the if/else

"Dava Foo(45, x)", ama genellikle bu sadece ben sadece tarif. ne mantıksal uzantıları gibi ya desen ve kombinasyonları gibi modelleri ile yapabileceğiniz çok daha fazlası var Desenleri aynı zamanda koşullarına ek kısıtlamaları olan muhafız var. Ayrıca derleyici desen eşleştirme, e iyileştirebilirsiniz durumlar vardır.bazı varken g şeyleri birleşim olabilir durumlar biraz üst üste. Gelişmiş grafikleri ve Optimizasyonu derleyici çalışma aktif bir bölge, bu yüzden eğer bayt kodu büyük ölçüde geçerli olan bu temel kural ve Scala gelecek sürümleri üzerinde geliştirir şaşırmayın.

Bunlara ek olarak, yanı sıra kendi özel sıkıcılar yazabilirsiniz veya varsayılan olanları yerine Scala dava sınıflar için kullanır. Eğer bunu yaparsanız, o zaman desen maç maliyetini çıkarıcı ne yapıyorsa maliyeti. İyi bir bakış http://lamp.epfl.ch/~emir/written/MatchingObjectsWithPatterns-TR.pdf bulunur

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • ethr95awd

    ethr95awd

    8 Kasım 2006
  • Lamborghini

    Lamborghini

    13 Aralık 2005