SORU
17 Ocak 2011, PAZARTESİ


Scala Dinamik bir tür pratik kullanımları

JVM dinamik diller ile entegrasyonu yanı sıra, Scala gibi Dynamic type bir statik olarak yazılan bir dil diğer güçlü kullanır?

CEVAP
17 Ocak 2011, PAZARTESİ


Dinamik bir tür özellikleri JRuby, Groovy veya diğer dinamik JVM dillerinde bulunan birçok dinamik metaprogramming ve method_missing gibi gerçekleştirmek için de kullanılabilir sanırım.

Arka planda örnek dinamik bir sorgu parametreleri ile bir yöntem adı bir SQL sorgu için tercüme nerede Raylar Aktif Kaydı, benzer oluşturmak için. Bu method_missing işlevselliği Ruby kullanıyor. Böyle bir şey (teoride böyle bir şey uygulamak için denemedim):

class Person(val id: Int) extends Dynamic {
  def _select_(name: String) = {
    val sql = "select "   name   " from Person where id = " id;
    // run sql and return result
  }

  def _invoke_(name: String)(args: Any*) = {
    val Pattern = "(findBy[a-zA-Z])".r
    val sql = name match {
      case Pattern(col) => "select * from Person where "   col   "='" args(0)   "'"
      case ...
    }
    // run sql and return result
  }
}

Yöntemleri çağırabilir yerde böyle bir kullanım, izin 'adı' ve 'findByName onlara açıkça İnsan sınıf: tanımlanan kalmadan

val person = new Person(1)

// select name from Person where id = 1
val name = person.name

// select * from Person where name = 'Bob'
val person2 = person.findByName("Bob")

Eğer dinamik metaprogramming eklenecek olsaydı, Dinamik türü çalışma zamanı sırasında eklenmiş olan yöntemleri yürütmesini sağlamak için gerekli olacaktır

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jon Reed

    Jon Reed

    14 AĞUSTOS 2006
  • Sali Kaceli

    Sali Kaceli

    24 ŞUBAT 2009
  • wwjoshdew

    wwjoshdew

    1 AĞUSTOS 2007