繁体   English   中英

Scala隐式方法参数

[英]Scala implicit method parameters

在下面的代码片段中:

scala> class A
defined class A

scala> class B extends A
defined class B

scala> def t(b: B)(implicit a: A) = println(a)
t: (b: B)(implicit a: A)Unit

scala> val b = new B
b: B = B@7746d2

scala> t(b)
<console>:12: error: could not find implicit value for parameter a: A
              t(b)
               ^

scala> val c = new B
c: B = B@4fa2e041

scala> t(b)
<console>:12: error: could not find implicit value for parameter a: A
              t(b)
               ^

scala> 

子类型在范围内,为什么编译失败?

您需要将val声明为implicit ,以使其可用于隐式参数:

scala> val b = new B
b: B = B@38cccef

scala> t(b)
<console>:12: error: could not find implicit value for parameter a: A
              t(b)
               ^

scala> implicit val c = new B
c: B = B@6d00a15d

scala> t(b)
$line4.$read$$iw$$iw$B@6d00a15d

您必须声明类型A的隐式值(或B,因为B扩展A)。

implicit val a = new A

然后你的t(b)应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM