내가 이것을 해낼 수있었습니다 가장 좋은 방법은 보유하는 클래스를 정의하는 것입니다 curried 형식 정보는 apply
메서드를 사용하여 함수 호출을 시뮬레이트합니다.
내가 여기에 대해 서면으로 작성했습니다 - 특정 예를 들어 http://caryrobbins.com/dev/scala-type-curry/
, 당신은 foo
을위한 서명에 apply
및 하지에 대한 서명에 implicit ev: Writes[A]
을 둘 필요가 것입니다. 명시 적으로 암시 적 인수를 전달하거나 암시 적으로 apply
메서드를 호출하는 경우 모호성이 발생하기 때문입니다.
object Example {
def foo[A]: _Foo[A] = _foo.asInstanceOf[_Foo[A]]
final class _Foo[A] private[Example] {
def apply[B, C](b: B, c: C)(implicit ev: Writes[A]): Unit = ???
}
private lazy val _foo = new _Foo[Nothing]
}
당신은 다음 카레하고자하고 apply
메서드에 전달 된 다음 인수를 추론 할 것이다 형식 매개 변수를 제공 할 수 있습니다 -
은 여기 예를 들어 예를 구현합니다. 당신은 다른 유형의 매개 변수를 지정할 필요가 끝날 경우
Example.foo[Int]("bar", new Object)
, 당신은 명시 적으로 apply
를 호출하여 수행 할 수 있습니다; 아직, 나는 이것을 아직 할 필요가 없다는 것을 알았다.
Example.foo[Int].apply[String, Object]("bar", new Object)
당신이 또한 내가 상기 포스트에서 논의 구조 유형을 사용할 수있는 중간 형식을 사용하지 않으려면, 그러나이 경우 reflectiveCalls
과 유추 된 형식 서명이 필요합니다. 둘 다 피하기를 좋아합니다.
매우 잘 작성되었으며 매우 영리합니다. – Alec