2011-10-19 24 views
7

Diyelim ki, aynı isimle ve dönüşle tanımlanmış iki metodum var ama farklı params:Scala'da aşırı yüklenmiş bir yöntemden bir işlev alabilir miyim?

def overload(x: Int) = x.toString 
def overload(s: String) = s 

Şimdi bunlardan birini bir işleve dönüştürmek istiyorum. Yöntem aşırı yüklenmediyse, şunu yapardım:

val f = overload _ 

Ancak, derleyici tam olarak belirsiz bir referanstan şikayet eder. Bunlardan birini yeniden adlandırmak dışında bir veya diğer aşırı yükleme yöntemlerinin bir işlevini yapmak için herhangi bir yolu var mı?

Teşekkürler!

John

cevap

15

derleyici bunu uygulanacağına argüman türünü bilmek gereğidir doğrudan aradığınızda aramaya hangi overload bilen yol. overload someInt sadece overload(x: Int)'a başvurabilir, bu nedenle herhangi bir belirsizlik yoktur. ondan bir işlev yaptığınızda

, bir argüman (henüz) sağlanmayan, bu yüzden derleyici size fonksiyon olmak istiyorum ne tür bir fikri yok, bu nedenle tavsiye ettiğiniz hangi overload bilmiyor için.

açıkça bunu türünü anlatmak için düzeltilmesi kolay yolu:

val f : Int => String = overload _ 

ya:

val f = (x : Int => overload x) 

ya:

val f = overload (_ : Int) 

(not: I have not Bunları henüz test ettim, fakat üzerinde bazı değişiklikler var.)

+0

Teşekkürler Ben. Onlara bir spin vereceğim. – jxstanford

İlgili konular