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

我想知道的是,在尝试像 my_set toArray(0) 这样的快速内联转换以快速打印第一个元素时,是否需要添加一些东西?如果我必须设置变量的结果,我可以很容易地接受这一点,但我的猜测是我在这里遗漏了一些小点,以使内联数组强制转换工作。

(...... Scala神奇,对吧?)

4

1 回答 1

1

toArray方法采用 type 的隐式参数ClassManifest[A],其中A是元素类型。如果你把它叫做 like mySet.toArray(0),编译器会认为你想显式地传递隐式参数,然后抱怨它没有正确的类型。为了避免这种情况,你可以这样写:

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