2010-04-25 19 views
8

semplice test REPL ...Perché questo esempio di parametro implicito Scala non funziona?

 
def g(a:Int)(implicit b:Int) = {a+b} 

Perché nessuno di questi tentativi di usi lavoro?

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

Grazie

risposta

14

è necessario definire b come implicita in 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 

In, solo i valori/metodi generali che sono definiti come impliciti wil l considerata e vengono cercati complete, o nell'oggetto guidata del tipo richiesto (Int in questo caso)

6

È necessario specificare che var o val sarà utilizzato come valore implicito:

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 
Problemi correlati