Метод get
для Map
дает вам Option
значения, а не значения. Таким образом, если ключ найден на карте, вы получите Some(value)
, если нет, вы получите None
. Поэтому вам нужно сначала «развернуть» эту опцию, чтобы убедиться, что на самом деле есть значение функции, которую вы можете вызвать (вызов apply
on):
def trigger(e: Event): Unit =
subscribers.get(e.key).foreach(_.apply(e.EventArgs))
или
def trigger(e: Event): Unit =
subscribers.get(e.key) match {
case Some(value) => value(e.EventArgs)
case None =>
}
Существует множество постов, объясняющих тип Option в Scala. Например этот или этот .
Также обратите внимание Замечание Луиджи об использовании неизменяемой карты (по умолчанию Map
) с var
вместо.