LINUX.ORG.RU

Помогите разобраться с синтаксисом scala

 


0

1

Прошел не так давно scala курс на курсере, и чтоб не забывать, решил время от времени освежать память в игровой форме, благо ресурсов в сети хватает. На одном из них наткнулся на строку следующего вида

for(i <- 0 until count) {
                // enemy: The name of this enemy
                // dist: The distance to your cannon of this enemy
                val Array(enemy, _dist) = readLine split " "
                val dist = _dist.toInt
            }
Что за ерунда? readLine split " " - вернет Array[String]. А это Array(enemy, _dist) - что за динозавр? Как к нему потом обращаться? Что такое _dist и как оно может существовать за пределами Array? Как потом обращаться к этим переменным(или как правильно по русски называть объект val) за пределами for?

★★★

val Array(enemy, _dist) = readLine split " "

банальное извлечение элементов списка же.

exception13 ★★★★★
()

вернет Array[String]. А это Array(enemy, _dist) - что за динозавр?

просто сравни

val inputValues = readLine split " "
val foo = inputValues[0]
val bar = inputValues[1]
val baz = inputValues[2] 

и

val Array(foo, bar, baz) = readLine split " "

exception13 ★★★★★
()

за пределами for никак, это же вне скоупа.

про динозавра - почитай про apply/unappl/unapplySeq.

anonymous
()
Ответ на: комментарий от exception13

Осознал. А как ему имя дать? И как обращаться за пределами for ?

LIKAN ★★★
() автор топика

val Array(enemy, _dist) = readLine split " " автоматом извлечет из readLine.split два первых элемента и присвоит их переменным enemy и _dist.

Man pattern matching

LongLiveUbuntu ★★★★★
()

Оказалось, что освежать нечего? Бывает :). (Похоже, кстати, на распаковку массива в Python.)

Virtuos86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.