0
DSL의 경우 함수 값을 암시 적으로 확장해야합니다.형식 유추를 잃지 않고 함축적으로 함수를 확장하는 방법
def takes(f: PimpedFunction[String, Int]) = f.foo
문제는 takes
를 호출하는 코드에 :
trait PimpedFunction[-A, +B] extends Function1[A, B] {
def foo = 42
}
object PimpedFunction {
implicit def pimp[A, B](f: Function1[A, B]): PimpedFunction[A, B] =
new PimpedFunction[A, B] {
def apply(a: A) = f(a)
}
}
PimpedFunction
를 사용하는 기능과 같이 정의 할 수 있습니다 : 예를 들어.
takes((_: String).size)
을하지만 입력 매개 변수를 생략하다 경우 컴파일은 추론에 실패 : 같은 다음 작품이 기대
takes(_.size)
내가 scalac의 추론을 돕기 위해 무엇을 변경할 수 있습니까?
OBS : 실제 사용 사례가이 관련이있다 : 당신이 당신의 takes
기능은 변환 자체를 할 수 있도록 할 수있는 경우 https://gist.github.com/xeno-by/4542402
고마워요! 내가 제시 한대로 문제를 해결 했으므로 올바른 것으로 표시했습니다. 불행히도'pimp' 함수가 매크로로 구현 될 때는 작동하지 않지만 별도로 문제를 제기 할 것입니다. –