我想了解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
类型的t
的{{1}}。然后,我想知道是否也应该在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
有什么不同?为什么它们会影响{{1}}是否在字段中可见?他们是否与我是否需要implicit val
关键字有什么关系?