SORU
24 Mart 2010, ÇARŞAMBA


Neden "yöntem aşırı yükleme"?

Neden Jorge Ortiz advise to avoid method overloading? yapar

CEVAP
24 Mart 2010, ÇARŞAMBA


Aşırı yükleme biraz daha sert bir işlev için bir yöntem kaldırmak için yapar:

object A {
   def foo(a: Int) = 0
   def foo(b: Boolean) = 0
   def foo(a: Int, b: Int) = 0

   val function = foo _ // fails, must use = foo(_, _) or (a: Int) => foo(a)
}

Sen seçime bağlı olarak, fazla yüklenmiş yöntemleri bir dizi birini alın.

Belirsizlik örtülü manzarası parametre türleri için argümanlar uyum uygulamak için çalışırken ortaya çıkacak büyük bir şans var:

scala> implicit def S2B(s: String) = !s.isEmpty                             
S2B: (s: String)Boolean

scala> implicit def S2I(s: String) = s.length                               
S2I: (s: String)Int

scala> object test { def foo(a: Int) = 0; def foo(b: Boolean) = 1; foo("") }
<console>:15: error: ambiguous reference to overloaded definition,
both method foo in object test of type (b: Boolean)Int
and  method foo in object test of type (a: Int)Int
match argument types (java.lang.String)
       object test { def foo(a: Int) = 0; def foo(b: Boolean) = 1; foo("") }

Sessizce Varsayılan parametreleri kullanılmaz hale gelebilir:

object test { 
    def foo(a: Int) = 0; 
    def foo(a: Int, b: Int = 0) = 1 
}

Ayrı ayrı, bu sebeplerin tamamen aşırı shun suçun yok. Bazı büyük problemlerin eksik gibi hissediyorum.

GÜNCELLEME

Kanıtlar birikiyor.

  • spec daha da karışır
  • 9 ** görünüm sınırları içinde kullanmak için.
  • Aşırı yüklenmiş alternatifleri ilişkin herhangi bir parametre için varsayılan tanıtmak için sınırlar.
  • Bağımsız değişkenler, beklenen bir türü olmadan yazılmış olacak çünkü '_.foo' as arguments to overloaded methods gibi anonim işlev rakamları geçemez.

GÜNCELLEME 2

  • (Şu anda) paket nesneleri yüklenmiş yöntemleri kullanamazsınız.
  • Uygulanabilirlik hataları API arayanlar için harder to diagnose.

GÜNCELLEME 3

  • aşırı çözümleme statik soyabilir, her tür güvenlik API:

    nesne İnt)) = () } tanımlanan O nesne

    Ç f(i)) // oops, ikinci aşırı arayacaktım ama birisi ben bakmıyorken dönüş f tipi değişti

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009
  • Tome Rodrigo

    Tome Rodrigo

    9 Temmuz 2006
  • TROPFEST

    TROPFEST

    27 Mart 2007