Почему этот пример Scala неявного параметра не работающий?

простой тест 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) }
                                     ^

Спасибо

8
задан Alex R 29 April 2010 в 14:49
поделиться

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)

14
ответ дан 5 December 2019 в 08:22
поделиться

Вы должны указать, какая переменная или 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
6
ответ дан 5 December 2019 в 08:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: