A => B
ile List[A] => List[B]
arasındaki işlevleri örtük olarak dönüştürmek istiyorum. Ben açık zamanla işlevini açıklama, bunuScalada örtülü kaldırma
val plusOne: (List[Int]) => List[Int] = (x: Int) => (x + 1)
: Aşağıdaki kodu yazarken yazık ki, örtük uygulanmaz
implicit def lift[A, B](f: A => B): List[A] => List[B] = ...
:
Aşağıdaki örtük tanım yazdı iyi çalışıyor.Neden? Bunu nasıl düzeltebilirim?
UPDATE. Sorun, anonim işlevlere özgü gibi görünüyor. Karşılaştırma:
@Test
def localLiftingGenerics {
implicit def anyPairToList[X, Y](x: (X, Y)): List[X] => List[Y] = throw new UnsupportedOperationException
val v: List[String] => List[Int] = ("abc", 239)
}
@Test
def localLiftingFuns {
implicit def fun2ListFun[X, Y](f: X => Y): List[X] => List[Y] = throw new UnsupportedOperationException
val v: List[String] => List[Int] = ((x: String) => x.length)
}
İlki iyi bir şekilde derlenmiştir. İkincisi ise hata olarak işaretlenmiş
"Implicit def" uygulamak için kullandığınız kodu sağlayabilir misiniz? –
@ChrisJamesC Bir test vakası ile güncellendi –
Bunu yapmak/yapmak istediğinize emin misiniz? "map" birkaç karakter için çok fazla netlik sağlar ve örn. val plusOne: (Liste [Int]) => Liste [Int] = _ map (_ + 1) 'aslında sürümünüzden daha kısa. –