我想了解 Scala 案例类参数之间的区别implicit
,implicit val
尤其是在涉及继承时。我有以下代码:
abstract class T(implicit x: Int)
case class T1(a: Int)(implicit x: Int) extends T
这个编译得很好。但是,当我创建一个类型的对象时T1
,我无权访问该字段x
。经过一番挖掘,看起来我需要implicit val x
在T1
定义中使用:
abstract class T(implicit x: Int)
case class T1(a: Int)(implicit val x: Int) extends T
这允许我访问类型t.x
为. 然后,我想知道我是否也应该使用in 。事实证明,以下代码会产生编译错误:t
T1
implicit val x
T
abstract class T(implicit val x: Int)
case class T1(a: Int)(implicit val x: Int) extends T
具体来说,编译器希望使用override
关键字。
implicit
vs到底有implicit val
什么不同?为什么它们会影响是否x
作为字段可见?它们与我是否需要override
关键字有什么关系?