1

私の質問への答えがすでにここにある場合は、それをリンクしてください...私は見ました。

私はいくつかのチュートリアルを行っていますが、このコードが少し奇妙に感じました。

val my_set = Set("one","two","three")
println("First Value:" + my_set.toArray(0))

コマンドラインから実行すると、次のエラーが発生しました。

$ scala settoarray.scala 
/Users/rwheadon/devStuff/scala_sandbox/so_settoarray.scala:2: error: type mismatch;
found   : Int(0)
required: ClassManifest[?]
println("First Value:" + my_set.toArray(0))
                                        ^
one error found

私はグーグルで検索し、ClassManifest [?]要件を提供するための方向性を探しましたが、インラインで機能するものを取得できませんでした。

好奇心から、同じ単純なtoArray()をvalに入れて、配列を正常にバインドしようとしました。

コード:

val my_set = Set("one","two","three")
val my_arry = my_set.toArray
println("First Value:" + my_arry(0))

コンソールから実行:

$ scala so_settoarray.scala 
First Value:one

私が疑問に思っているのは、最初の要素のクイックprintlnのためにmy_set toArray(0)のようなクイックインライン変換を実行しようとするときに追加する必要があるものがあるかどうかです。変数の結果を設定する必要がある場合は、それを簡単に受け入れることができますが、インライン配列キャストを機能させるための小さな点が欠けていると思います。

(... Scala魔法ですよね?)

4

1 に答える 1

1

toArrayメソッドは type の暗黙の引数を取ります。ClassManifest[A]ここAで、 は要素の型です。のように呼び出すとmySet.toArray(0)、コンパイラは暗黙の引数を明示的に渡したいと考え、正しい型がないと文句を言います。それを回避するには、次のように記述します。

mySet.toArray.apply(0)
于 2013-01-29T15:14:31.323 に答える