이 코드가 로컬 범위에 정의 된 암시 적 함수를 사용하지 않는 이유는 무엇입니까? 다른 곳에서 암시 적 함수를 어디에서 가져 옵니까? 로컬 범위 내 암시 인증 된 정의의스칼라 암시 적 함수가 매개 변수화 됨
def implctest[T](a: T)(implicit b:T=>T):T = {b apply a}
class Testimplcl(val a:Int){
override def toString() = "value of the 'a' is = "+a
}
implicit def dble(x: Int):Int = {x + x}
implicit def stringer(x: String):String = {x+" no not a pity"}
implicit def myclass(x: Testimplcl):Testimplcl = new Testimplcl(x.a +1)
implctest[String]("oh what a pity")
implctest[Int](5)
implctest[Testimplcl](new Testimplcl(4))
없음이 촬영되지 않습니다. 를 예를 들어 implctestInt이 결과 5를 제공, 나는 그것이 암시 적으로 dble을 복용하여 10를 반환 할 것으로 예상된다.
오류도 표시되지 않습니다.
implicit val dble = (x: Int) => x + x
implicit val stringer = (x: String) => x + " no not a pity"
implicit val myclass = (x: Testimplcl) => new Testimplcl(x.a +1)
후 즉시이 문제에 대한 이유가 표시됩니다. implctest은 단순히 당신이 THS처럼 implicits를 다시 작성할 경우에
감사합니다 :) 지금 문제를 발견했습니다. def는 localscope에 있지만 함수가 아닙니다.함수를 위해 사용될 때만 함수 객체가됩니다. 그러나 함축적 인 해결책이 아닙니다. – Hems
그리고 네가 말했듯이, 일단 내가 직접 함수로 변경하면 오류가 발생합니다. – Hems