2010-04-25 2 views
8

простой тест РЕПЛ ...Почему этот пример Scala неявного параметра не работает?

 
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) } 
            ^

Благодаря

ответ

14

вам необходимо определить, как б заложенная в 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 = [email protected] 

scala> a.c 
res3: Int = 10 

В общем, только значения/методов которые определяются как implicits wil л считаются, и они ищутся в объеме, или в сопутствующем объекте требуемого типа (Int в этом случае)

6

Вы должны указать, какой вар или вал будет использоваться в качестве неявного значения:

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 = [email protected] 

scala> res0.c 
res1: Int = 10 

scala> class A(implicit var b:Int) { var c = g(2) } 
defined class A 
Смежные вопросы