#scala
#scala
Вопрос:
Учитывая этот код:
for {
evListeners <- eventListeners.get(manifest.erasure.asInstanceOf[Class[Any]])
listener <- evListeners
} listener.asInstanceOf[A => Unit].apply(event)
Как я могу преобразовать это в вызовы методов? Я пробовал это, но это выдает ошибку, в то время как вышеописанное не:
val listeners = eventListeners.get(manifest.erasure.asInstanceOf[Class[Any]])
listeners.foreach(_.asInstanceOf[A => Unit].apply(event))
Ответ №1:
Предполагая, что это eventListeners
какой-то Map[Class[Any],Seq[Any]]
вызов, вам нужно добавить один foreach
вызов, так как get
на этой карте появляется Option[Seq[Any]]
:
val evListeners = eventListeners.get(manifest.erasure.asInstanceOf[Class[Any]])
evListeners.foreach(_.foreach(_.asInstanceOf[A => Unit].apply(event)))
Комментарии:
1. О, это имеет смысл. Я предполагаю, что тогда foreach on
Option
выполняет итерации только по неNone
элементам?2. Точно.
Some(x).foreach(f)
выполняетf(x)
,None.foreach(f)
ничего не выполняет.