вещь ->
- это объект-экстрактор, определенный в объект-компаньон FSM .Его можно определить следующим образом:
object -> {
def unapply[A, B](x: (A, B)): Option[(A, B)] = Some(x)
}
, и он будет просто соответствовать парам объектов.Если один из подшаблонов является подчеркиванием, то он просто соответствует каждому возможному объекту.Например, с приведенным выше определением:
List((1, 2), (1, 3), (2, 3)).collect{ case x @ (1 -> _) => x }
возвращает
List[(Int, Int)] = List((1,2), (1,3))
(все переходы состояний из 1
во что угодно), тогда как
List((1, 2), (1, 3), (2, 3)).collect{ case x @ (_ -> 3) => x }
возвращает
List[(Int, Int)] = List((1,3), (2,3))
(все переходы состояний из чего-либо в 3
).То же самое относится к штатам FSM.