8

简单的 REPL 测试...

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

为什么这些尝试的用法都不起作用?

1.

scala> 类 A { var b:Int =8; 变量 c = g(2) }
:6:错误:找不到参数b的隐式值:Int
       类 A { var b:Int =8; 变量 c = g(2) }

2.

scala> 类 A(var b:Int) { var c = g(2) }  
:6:错误:找不到参数b的隐式值:Int
       类 A(var b:Int) { var c = g(2) }
                                     ^

谢谢

4

2 回答 2

14

您需要将 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)

于 2010-04-25T15:13:15.827 回答
6

您必须指定哪个 var 或 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
于 2010-04-25T15:13:32.257 回答