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

  • bashirsultani

    bashirsultan

    22 Mart 2010
  • Candyrat Records

    Candyrat Rec

    10 Mayıs 2006
  • max2sims2

    max2sims2

    19 Kasım 2008