Рассмотрим это Map[String, Any]
:
val m1 = Map(("k1" -> "v1"), ("k2" -> 10))
Теперь давайте напишем for
:
scala> for ((a, b) <- m1) println(a + b)
k1v1
k210
Пока все хорошо.
Теперь давайте определим тип второго члена:
scala> for ((a, b: String) <- m1) println(a + b)
k1v1
scala> for ((a, b: Integer) <- m1) println(a + b)
k210
Здесь, когда я указываю тип, происходит фильтрация, и это здорово.
Теперь скажите, что вместо этого я хочу использовать массив [Любой]:
val l1 = Array("a", 2)
Здесь вещи ломаются:
scala> for (v: String <- l1) println(v)
<console>:7: error: type mismatch;
found : (String) => Unit
required: (Any) => ?
Мой двойной вопрос:
- почему второй фильтр совпадений также не фильтруется?
- есть ли способ выразить такую фильтрацию во втором сценарии без использования грязного
isInstanceOf
?