【问题标题】:Why is this Scala example of implicit parameter not working?为什么这个隐式参数的 Scala 示例不起作用?
【发布时间】:2011-02-12 02:44:05
【问题描述】:
简单的 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) }
^
谢谢
【问题讨论】:
标签:
scala
language-features
scala-2.8
【解决方案1】:
您需要将 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)中搜索它们
【解决方案2】:
您必须指定哪个 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