implicits in scala Class constructors

為{幸葍}努か 提交于 2020-02-05 03:37:47

问题


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
}

回答1:


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.




回答2:


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
}


来源:https://stackoverflow.com/questions/39390398/implicits-in-scala-class-constructors

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!