простой тест REPL...
def g(a:Int)(implicit b:Int) = {a+b}
Почему не делают ни одного из этих предпринятых использований работа?
1.
scala> class A { var b:Int =8; var c = g(2) } :6: error: could not find implicit value for parameter b: Int class A { var b:Int =8; var c = g(2) }
2.
scala> class A(var b:Int) { var c = g(2) } :6: error: could not find implicit value for parameter b: Int class A(var b:Int) { var c = g(2) } ^
Спасибо
вам необходимо определить b как неявное в A
scala> def g(a:Int)(implicit b:Int) = {a+b}
g: (a: Int)(implicit b: Int)Int
scala> class A { implicit var b:Int =8; var c = g(2) }
defined class A
scala> val a = new A
a: A = A@1f7dbd8
scala> a.c
res3: Int = 10
В общем, будут рассматриваться только значения / методы, которые определены как неявные, и поиск по ним выполняется в области видимости или в сопутствующем объекте требуемого типа (Int в этом case)
Вы должны указать, какая переменная или val будет использоваться в качестве неявного значения:
scala> def g(a:Int)(implicit b:Int) = {a+b}
g: (a: Int)(implicit b: Int)Int
scala> class A { implicit var b:Int =8; var c = g(2) }
defined class A
scala> new A
res0: A = A@16b18b6
scala> res0.c
res1: Int = 10
scala> class A(implicit var b:Int) { var c = g(2) }
defined class A