Reputation: 7394
I dont understand why only one out of the three examples below are working? What makes the other two faulty?
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
}
Upvotes: 1
Views: 133
Reputation: 170859
In the first case implicit
doesn't refer to a
but to the entire parameter list. It means "a
and b
can be provided implicitly when calling the constructor" (and also makes them available as implicits in the class body). You can't make a single parameter of a class or a method implicit
in this sense.
The second use of implicit
is to mark a type/object member. Constructor parameters aren't members, but can be made into members by using val
/var
, as in pamu's answer; or, to avoid making it visible, private[this] val
.
Upvotes: 3
Reputation: 14825
class H1(implicit a:String, b: Int) {
//Working
}
Need val or var in below two cases
class H2(a:String, implicit val b: Int) {
//Working
}
class H3(implicit a:String, implicit val b: Int) {
//Working
}
Upvotes: 1