隐含在 scala Class 构造函数中

implicits in scala Class constructors

我不明白为什么下面三个示例中只有一个有效?是什么让其他两个有问题?

class H(implicit a:String, b: Int) {
  //Working
}

class H(a:String, implicit b: Int) {
  //Not-Working
}

class H(implicit a:String, implicit b: Int) {
  //Not-Working
}
class H1(implicit a:String, b: Int) {
  //Working
}

以下两种情况需要val或var

class H2(a:String, implicit val b: Int) {
  //Working
}

class H3(implicit a:String, implicit val b: Int) {
  //Working
}

在第一种情况下,implicit 不是指 a,而是指整个参数列表。这意味着“ab 可以在调用构造函数时隐式提供”(并且还使它们在 class 主体中作为隐式提供)。从这个意义上说,您不能为 class 或方法 implicit 创建单个参数。

implicit的第二个用途是标记type/object成员。构造函数参数不是成员,但可以通过使用 val/var 使其成为成员,如 pamu 的回答;或者,为了避免使其可见,private[this] val.