SORU
10 Ocak 2011, PAZARTESİ


Neden Scala derleyicisi varsayılan bağımsız değişkenleri ile aşırı yöntemleri izin yok?

Bu yöntem overloadings belirsiz hale gelebilir geçerli durumlar olabilir iken, neden derleyici derleme ne de belirsiz bir süre, yani ne de çalışma zamanında kod izin yok?

Örnek:

// This fails:
def foo(a: String)(b: Int = 42) = a   b
def foo(a: Int)   (b: Int = 42) = a   b

// This fails, too. Even if there is no position in the argument list,
// where the types are the same.
def foo(a: Int)   (b: Int = 42) = a   b
def foo(a: String)(b: String = "Foo") = a   b

// This is OK:
def foo(a: String)(b: Int) = a   b
def foo(a: Int)   (b: Int = 42) = a   b    

// Even this is OK.
def foo(a: Int)(b: Int) = a   b
def foo(a: Int)(b: String = "Foo") = a   b

val bar = foo(42)_ // This complains obviously ...

Bu kısıtlamalar biraz gevşetti olamaz herhangi bir neden var mı?

Özellikle dönüştürürken ağır yüklenmiş Java kod Scala varsayılan argümanlar çok önemli değil iyi Öğren sonra yerine bol Java yöntemlerle bir Scala yöntemleri spec/derleyici keyfi kısıtlamalar getirir.

CEVAP
13 NİSAN 2012, Cuma


Lukas Rytz (here) alıntı yapmak istiyorum:

Neden bir deterministik-adlandırma düzeni için istedik. oluşturulan varsayılan argümanlar dönüşü olan yöntemler. Eğer yazarsanız

def f(a: Int = 1)

derleyici oluşturur

def f$default$1 = 1

Eğer aynı parametre için varsayılan değeri ile iki aşırı varsa pozisyon, farklı bir adlandırma düzeni gerekir. Ama devam etmek istiyoruz bayt-kodu birden çok derleyici çalışır üzerinde oluşturulan kararlı.

Gelecek Scala sürümü için bir çözüm dahil olabilirtürü adlarıadlandırma şeması içine varsayılan olmayan argümanlar (aşırı yüklü sürümlerini belirsizliği olan bir yöntem, başında o), örneğin bu durumda:

def foo(a: String)(b: Int = 42) = a   b
def foo(a: Int)   (b: Int = 42) = a   b

gibi bir şey olurdu:

def foo$String$default$2 = 42
def foo$Int$default$2 = 42

Biri 9* *için istekli?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009
  • michal lelkowski

    michal lelko

    9 Temmuz 2006
  • USI Events

    USI Events

    6 AĞUSTOS 2013