Scala-IDE で作業している私は、メソッドの 1 つが を受け取る Java ライブラリを持っていますjava.lang.Object
。Int
そして、値のリストをそれにマップしたいと思います。機能する唯一の解決策は次のとおりです。
val listOfInts = groupOfObjects.map(_.getNeededInt)
for(int <- listOfInts) libraryObject.libraryMethod(int)
次のもの:
groupOfObjects.map(_.getNeededInt).map(libraryMethod(_)
そしてさえ
val listOfInts = groupOfObjects.map(_.getNeededInt)
val result = listOfInts.map(libraryObject.libraryMethod(_))
いう
型の不一致; found : Int required: java.lang.Object 注: scala.Int => java.lang.Integer からの暗黙的な存在が存在しますが、Object から継承されたメソッドはあいまいにレンダリングされます。これは、任意の scala.Int を任意の AnyRef に変換するブランケット暗黙を回避するためです。タイプのアクリプションを使用したい場合があります:
x: java.lang.Integer
。
のようなもの
val result = listOfInts.map(libraryObject.libraryMethod(x => x.toInt))
また
val result = listOfInts.map(libraryObject.libraryMethod(_.toInt))
も機能しません。
1) なぜそれが起こっているのですか? 私の知る限り、for
とmap
ルーチンはそれほど違いはありません!
2) また: どういう意味You may wish to use a type ascription: x: java.lang.Integer
ですか? どうすればいいですか?のように型を明示的に指定してみましx: Int => x.toInt
たが、それは誤りです。では、「タイプの帰属」とは何ですか?
アップデート:
T.Grottker によって提案された解決策がそれに追加されます。私がそれで得ているエラーはこれです:
- 展開された関数のパラメーターの型がありません ((x$3) => x$3.asInstanceOf[java.lang.Object])
- 展開された関数のパラメーターの型がありません ((x$3) => x$3.asInstanceOf{#null#}[java.lang.Object]{#null#}) {#null#}
そして私は、OMG、それはただ成長するだけです!<null>
ここでこれらすべてが何を意味するのか、誰が説明できますか? 真実を知りたいだけです。(注: <> ブレーキを # に置き換える必要がありました。これは、SO エンジンがすべてを切り取ったためです。想像力を働かせて元に戻してください)。