Scala関数(おそらく匿名)から暗黙的な変換をjava.util.function.Function
に作成したいと考えています。ここで私が持っているものです。Scala関数からJava関数への暗黙的変換
import java.util.function.{Function => JavaFunction}
implicit def scalaFunctionToJavaFunction[From, To](function: (From) => To): JavaFunction[From, To] = {
new java.util.function.Function[From, To] {
override def apply(input: From): To = function(input)
}
}
それが変換される機能は、明示的にパラメータの型を指定していない場合に型推論が失敗したことを除いて正常に動作します:
val converted: JavaFunction[String, Int] = (s: String) => s.toInt // works fine
val converted2: JavaFunction[String, Int] = scalaFunctionToJavaFunction(s => s.toInt) // works
val converted3: JavaFunction[String, Int] = s => s.toInt // gives compilation error "missing parameter type"
コンパイラが型を推論することができます
私の質問は以下のとおりです。
- なぜ、Scalaコンパイラは3番目のケースでパラメータの型を推測できないのですか?
- タイプが推測されるように暗黙の変換を変更できますか?
私はrelated questionを認識していますが、私の質問には答えられません。
この問題は、Javaとの相互運用性、btwには関係していないようです。 JavaFunction
をカスタムScala特性に置き換えると、動作は変わりません。
[関連の記事](http://www.tikalk.com/incubator/simulating-sam-closures-scala/)が見つかりました。これは答えを提供するものではありませんが、Scala関数の暗黙的な変換の関連トピックに触れています。 – Mifeet