Scala 什么是;“覆盖隐式”;什么意思?

Scala 什么是;“覆盖隐式”;什么意思?,scala,Scala,我在看一段代码,上面写着 case class MyClass(override implicit val x : SomeClass) extends SomeOtherClass(...) { ... } 在此上下文中,override implicit是什么意思,如果我想生成一个带有显式参数的MyClass实例,我该怎么办?这意味着SomeOtherClass有一个SomeClass类型的x字段,它将被传递给MyClass的构造函数的x覆盖 implicit将为我的类implic

我在看一段代码,上面写着

case class MyClass(override implicit val x : SomeClass) extends SomeOtherClass(...) {
    ...
}

在此上下文中,
override implicit
是什么意思,如果我想生成一个带有显式参数的
MyClass
实例,我该怎么办?

这意味着
SomeOtherClass
有一个
SomeClass
类型的
x
字段,它将被传递给
MyClass
的构造函数的
x
覆盖

implicit
将为我的类
implicit
生成
x
参数,并允许以下代码:

implicit val someInt = 5
val a = new MyClass
val b = new MyClass()
val c = MyClass() // as it it a case class
如果要生成带有显式参数的
MyClass
实例,可以如下显式传递它们:

val a = new MyClass()(42)
(为了简单起见,示例假定
SomeClass
Int


澄清一下:这里的
隐式
覆盖
关键字是不相关的。

实际上,还有更多的话要说。我想这是一只虫子
trait X{def i:Int}
然后
case类C(覆盖隐式vali:Int,j:Int)扩展X
不应该使
j
或者
i
成为隐式参数,因为隐式在这里是一个LocalModifier,而不是最后一个classparam子句中的前导标记。但这可能只是语法上的折衷<代码>类Y(私有隐式val i:Int,val j:Int)使隐式的作用域看起来错误更加明显
j
不是私有的。
implicit
始终适用于整个参数列表,并且此参数列表必须是最后一个,这是规则,但查看示例可能不是很直观。在特殊情况下,第一个参数上的修饰符<代码>类Y(private val i:Int,implicit val j:Int)。我不确定您的意思,但在第二个参数中使用implicit不能创建对象,除非您将
i
j
都明确地放置。我建议
implicit
,因为修饰符不应该创建隐式参数列表;在我的两个例子中应该是一样的。对于该行为,您应该说
classy(隐式覆盖vali:Int)
;这是语法上的另一种产物。