scala类构造函数中的隐式
我不明白为什么下面三个例子中只有一个有效?是什么使另外两个有缺陷scala类构造函数中的隐式,scala,implicit,Scala,Implicit,我不明白为什么下面三个例子中只有一个有效?是什么使另外两个有缺陷 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 } 在以下两种情况下需要val或var class H2(a:String, implici
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
}
在以下两种情况下需要val或var
class H2(a:String, implicit val b: Int) {
//Working
}
class H3(implicit a:String, implicit val 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,而是指整个参数列表。这意味着在调用构造函数时可以隐式地提供a和b,并使它们在类主体中作为隐式对象可用。从这个意义上讲,不能使类或方法的单个参数隐式
隐式的第二个用途是标记类型/对象成员。构造函数参数不是成员,但可以使用val/var将其设置为成员,如pamu的回答所示;或者,为了避免使其可见,private[this]val.在第一种情况下,implicit不是指a,而是指整个参数列表。这意味着在调用构造函数时可以隐式地提供a和b,并使它们在类主体中作为隐式对象可用。从这个意义上讲,不能使类或方法的单个参数隐式
隐式的第二个用途是标记类型/对象成员。构造函数参数不是成员,但可以使用val/var将其设置为成员,如pamu的回答所示;或者,为了避免使其可见,private[this]val.classh2a:String,隐式val b:Int将被编译,但实际上不会是隐式@ukasz,但它会在类内声明b隐式。更有趣的事情发生在H3上,其中a和b在内部和外部都是隐式的,构造函数更改为新的H3123456。黑暗的角落,你永远不知道那里隐藏着什么。类H2a:String,隐式val b:Int将编译,但实际上不会是隐式@Łukasz,但它将在类内声明b隐式。更有趣的事情发生在H3上,其中a和b在内部和外部都是隐式的,构造函数更改为新的H3123456。黑暗的角落,你永远不知道那里潜伏着什么。