私はこれをやってのけることができました最良の方法は、保持しているクラスを定義することですカレットタイプの情報は、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