Neden "yöntem aşırı yükleme"? | Netgez.com
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

  • Dave Wallace

    Dave Wallace

    27 Kasım 2007
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011
  • SignatureSeries

    SignatureSer

    24 Aralık 2006