Scala 2.9: любой способ использования toArray на встроенном наборе

Если ответ на мой вопрос уже есть здесь, пожалуйста, дайте ссылку... Я посмотрел.

Я работаю над некоторыми учебниками, и мне показалось немного странным, что этот код:

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

Я гуглил и искал в SO какое-то направление по обеспечению требования 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 это магия, верно?)


person rwheadon    schedule 29.01.2013    source источник


Ответы (1)


Метод toArray принимает неявный аргумент типа ClassManifest[A], где A — тип элемента. Если вы назовете его как mySet.toArray(0), компилятор решит, что вы хотите явно передать неявный аргумент, а затем жалуется, что он не имеет правильного типа. Чтобы избежать этого, вы можете написать это так:

mySet.toArray.apply(0)
person Kim Stebel    schedule 29.01.2013
comment
Я очень рад видеть ваш ответ. Я много видел о apply(), но этот конкретный случай, когда он применяется, стал моментом лампочки. Бесконечно благодарен. - person rwheadon; 29.01.2013