2016-04-04 11 views
3

Bu bağlamda type parametresi için varsayılan değerler nasıl belirlenir?scala: tip parametrelere göre işlev için varsayılan değerler; kısmi uygulamalı bağlamda kullanılır

def increase[T: Numeric](x: T, y: T): T = implicitly[Numeric[T]].plus(x, y) 

val inc = increase _ 

Çıktı:

C:\Sources\scala\main.scala:12: error: could not find implicit for evidence parameter of type Numeric[Nothing] val inc = increase _

+1

Bkz http://www.cakesolutions.net/teamblogs/default-type-parameters-with-implicits-in-scala . –

cevap

2

increase bir genel tür parametresi vardır. Yöntemi bir işleve çözümlemeye çalıştığınızda, dolaylı olarak yöntemi çözümlemesi gereken T türünü aramaya çalışır. , türünü belirtmediğinizden, Numeric[Nothing]'a bakmaya çalışır ve kapsam dahilinde böyle bir örtülü özellik olmadığını öğrenir.

açıkça her çözünürlük için tipini T belirtmek edilir gerekenler:

scala> val intInc = increase[Int] _ 
inc: (Int, Int) => Int = <function2> 

scala> val doubleInc = increase[Double] _ 
doubleInc: (Double, Double) => Double = <function2> 
+0

Yani, bu durumda gerçekten varsayılan türünü belirtmeniz gerekiyor? Oh .. Anladım, açık cevap gibi görünüyor. Soru başlığı değiştirmek zorunda gibi görünüyor .. Teşekkürler – Pavel

İlgili konular